c# - Assembly.GetType() 和 typeof() 返回不同的类型?

标签 c# reflection types

假设您有一个由以下简单代码编译而成的 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/

相关文章:

c# - 如何通过在字符串中指定其名称来获取枚举类型

java - 如何调用另一个Jar文件的Java类?

dynamic - Clojure 是单类型的吗?

c - 是否可以将 C 数据类型存储在变量中?

c# - 当我们遇到异常时渲染错误 View

c# - mvvm 解决嵌套模型和 View 模型

java - scala:FOO 不能转换为 FOO

php - is_numeric() 与 is_float() 与 is_int()

c# - 序列化对象以传输到消息队列实例中

c# - 在 Skype for Business 中获取通话时间