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
我对这个有点头疼。 该类是公开的,我肯定拼写正确。
提前谢谢。
这里
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,它工作正常。