我拿一个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)
这是正常行为。使用Assembly.LoadFile
将加载程序集并创建它的新“实例”。要解决这个问题,只需使用Assembly.LoadFrom
反而。这将首先在当前上下文中查找请求的程序集是否已加载,如果已加载,则获取该程序集。像您所做的那样比较类型就会起作用。
编辑:我不知道这是否是有意的,但此方法适用于 .NetFramework 和 .NetCore。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)