Assembly.GetType is returning null

本文关键字:null returning is GetType Assembly | 更新日期: 2023-09-27 18:35:28

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

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

提前谢谢。

Assembly.GetType is returning null

这里

MessageBox.Show(t.FullName.ToString()); //FULLNAME

打印出类型的FullName,并在使用该FullName后从程序集获取类型。

应指定类型的完整命名空间,例如:

encryptionAssembly.GetType("My.Namespace.Encryption")

你可以用t.FullName来了解它

尝试指定加密类型的全名(namespace.classname)

我在运行时不知道程序集的完全限定名称,但我只能使用程序集的 ExportedType 中的类名来获取类型。例如,要获取导出类型"类名":

var assembly = Assembly.LoadFile(dllPath);
var types = assembly.ExportedTypes;
if(types != null)
{
    var type = types.Where(x => x.Name == "ClassName").FirstOrDefault();
}

如果有多个类型具有相同的"ClassName"名称,则只会获得第一个,但对于我正在加载的dlls来说,这是一个安全的解决方案。

在我的情况下,我的项目中的文件/.cs文件丢失了。我添加了丢失的cs文件,它就像魅力一样工作。我有一个名为 Project A 的 cs 项目。因为它的代码正在寻找完整的类名ProjectA.ClassA。当我收到此错误时,我转到项目A,看到由于合并问题.cs缺少类A。我将 ClassA.cs 添加到项目 A,它工作正常。