在.NET Core

时间:2018-02-09 18:16:56

标签: c# .net .net-core

我接受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);
}

最后一次断言测试失败。

这只发生在Windows上的.NET Core上。 (我正在测试最新版本,2.1.4)。但.NET Framework并非如此。

我的问题是:

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

1 个答案:

答案 0 :(得分:4)

这是正常行为。使用Assembly.LoadFile将加载程序集并创建一个新的"实例"它的。要解决此问题,只需使用Assembly.LoadFrom即可。如果已经加载了所请求的程序集,则首先查看当前上下文,如果已加载,则将其取出。比较像你这样的类型将会起作用。

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