我接受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并非如此。
我的问题是:
答案 0 :(得分:4)
这是正常行为。使用Assembly.LoadFile
将加载程序集并创建一个新的"实例"它的。要解决此问题,只需使用Assembly.LoadFrom
即可。如果已经加载了所请求的程序集,则首先查看当前上下文,如果已加载,则将其取出。比较像你这样的类型将会起作用。
编辑:我不知道它是否有意,但这种方法适用于.NetFramework和.NetCore。