我正在尝试动态加载加密程序集,但我的GetType
返回null,即使我使用了正确的类名。这是代码:
//Load encryption assembly.
Assembly encryptionAssembly = Assembly.LoadFrom("Encryption.dll");
foreach(Type t in encryptionAssembly.GetTypes())
{
MessageBox.Show(t.Name.ToString());
// This shows "Encryption"
}
Type encryptionClass = encryptionAssembly.GetType("Encryption");
// But this returns null
我对这个有点头疼。这堂课是公开的,我肯定拼写正确。
提前致谢。
答案 0 :(得分:14)
这里
MessageBox.Show(t.FullName.ToString()); //FULLNAME
打印出该类型的FullName
,并在使用 FullName
后从程序集中获取该类型。
答案 1 :(得分:10)
您应该指定类型的完整命名空间,例如:
encryptionAssembly.GetType("My.Namespace.Encryption")
您可以使用t.FullName
答案 2 :(得分:4)
尝试指定加密类型(namespace.classname)的全名
答案 3 :(得分:0)
我在运行时不知道程序集的完全限定名,但是我只能使用程序集的ExportedTypes中的类名来获取类型。例如,要获取导出类型“ClassName”:
var assembly = Assembly.LoadFile(dllPath);
var types = assembly.ExportedTypes;
if(types != null)
{
var type = types.Where(x => x.Name == "ClassName").FirstOrDefault();
}
如果有多个类型具有相同名称的“ClassName”,那么这只会得到第一个,但这对于我正在加载的dll是一个安全的解决方案。
答案 4 :(得分:0)
在我的情况下,我的项目中的文件/ .cs文件丢失了。我添加了缺少的cs文件,它就像魅力一样。我有一个名为ProjectA的cs项目。因为它代码正在寻找完整的类名ProjectA.ClassA。当我收到此错误时,我转到ProjectA并看到ClassA.cs因合并问题而丢失。我将ClassA.cs添加/包含在ProjectA中并且工作正常。