假设您有一个由以下简单代码编译而成的 Class.dll 程序集:
namespace ClassLibrary
{
public class Class
{
}
}
并考虑将上述 Class.dll 作为项目引用并使用以下代码的不同项目:
Assembly assembly = Assembly.LoadFrom(@"Class.dll");
Type reflectedType = assembly.GetType("ClassLibrary.Class");
Type knownType = typeof(ClassLibrary.Class);
Debug.Assert(reflectedType == knownType);
断言失败,我不明白为什么。
如果我将 ClassLibrary.Class 替换为 System.Text.RegularExpressions.Regex 类并将 Class.dll 替换为 System.dll,则断言成功,所以我猜它与项目属性有关?也许是一些编译开关?
提前致谢
最佳答案
问题在于加载上下文:通过 .LoadFrom 加载的程序集与通过 Fusion (.Load) 加载的程序集保存在不同的“堆”中。这些类型实际上与 CLR 不同。检查this link从 CLR 架构师那里获取更多详细信息。
关于c# - Assembly.GetType() 和 typeof() 返回不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528287/