Assembly.GetType返回null

时间:2012-05-28 10:25:26

标签: c# reflection

我正在尝试动态加载加密程序集,但我的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

我对这个有点头疼。这堂课是公开的,我肯定拼写正确。

提前致谢。

5 个答案:

答案 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中并且工作正常。