在.NET Core中引用时,从程序集文件加载的类型不等于相同的类型

Ira*_*chi 7 .net c# .net-core

我拿a Type,查询其装配位置,然后从同一地址加载程序集,并从加载的程序集中找到相同的类型.结果类型不等于原始类型.

这是测试用例:

[TestMethod]
public void TestTypeLoadingWithFilePath()
{
    var originalType = typeof(SomeClass);
    var assemblyAddress = originalType.Assembly.Location;

    var loadedAssembly = Assembly.LoadFile(assemblyAddress);
    Assert.IsNotNull(loadedAssembly);

    var loadedType = loadedAssembly.GetType(originalType.FullName);
    Assert.IsNotNull(loadedType);

    Assert.AreEqual(originalType, loadedType);
}
Run Code Online (Sandbox Code Playgroud)

最后一个断言测试失败.

这仅发生在Windows上的.NET Core上.(我正在测试最新版本,2.1.4).但.NET Framework不是这种情况.

我的问题是:

  • 这是设计还是错误?
  • 如果是设计,为什么?
  • 同样,如果它是设计的,这是不是意味着.NET Standard的两个实现之间的不同行为?(.NET Core与.NET Framework)

Phi*_*aré 7

这是正常的行为。使用Assembly.LoadFile将加载程序集并创建它的新“实例”。要解决此问题,只需Assembly.LoadFrom改用即可。如果请求的程序集已经加载,这将首先查看当前上下文,如果已加载,则采用此上下文。比较像您正在做的类型将起作用。

编辑:我不知道它是否有意,但此方法适用于 .NetFramework 和 .NetCore。