13

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

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

提前致谢。

4

5 回答 5

17

这里

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

打印出FullName类型,然后使用 FullName从程序集中获取类型。

于 2012-05-28T10:29:40.857 回答
11

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

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

你可以知道它使用t.FullName

于 2012-05-28T10:28:01.140 回答
5

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

于 2012-05-28T10:27:37.053 回答
2

我在运行时不知道我的程序集的完全限定名称,但我能够仅使用程序集的 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,这是一个安全的解决方案。

于 2016-04-07T15:20:39.370 回答
0

在我的情况下,我的项目中的 file/.cs 文件丢失了。我添加了丢失的 cs 文件,它就像魅力一样。我有一个名为 ProjectA 的 cs 项目。因为它的代码正在寻找完整的类名 ProjectA.ClassA。当我收到此错误时,我去了 ProjectA 并看到 ClassA.cs 由于合并问题而丢失。我将 ClassA.cs 添加/包含到 ProjectA 中,它运行良好。

于 2016-08-11T18:22:31.970 回答