【发布时间】:2018-02-10 03:24:45
【问题描述】:
我取了一个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)
【问题讨论】:
-
如果针对 UnderlyingSystemType 进行测试会发生什么?我的意思是: Assert.AreEqual(originalType, loadedType.UnderlyingSystemType);测试通过了吗?
-
不。
UnderlyingSystemType也失败了。 -
我还在 GitHub 上向 CoreFX 团队报告了这一情况,以获得直接反馈。供参考:github.com/dotnet/corefx/issues/27004
-
谢谢,我会监控这个问题,这很奇怪......
-
需要注意的是,如果将加载的程序集与 originalType.Assembly 进行比较,它们不相等(在 .Net Core 版本中)。所以它与类型不同无关,因为类型来自的程序集不同