我们在不同的文件夹中有两个相同的dll。
当我们加载第二个dll时,使用
Assembly.ReflectionOnlyLoadFrom(assemblyPath)我们得到一个错误:
"API restriction: The assembly 'file.dll' has already loaded from a different location. It cannot be loaded from a new location within the same appdomain."这是可以理解的,但当我们这样做的时候:
Assembly.LoadFrom(assemblyPath);它工作得很好。
为什么?使用"ReflectionOnly“方法会有什么变化?
在我们的例子中,唯一的用法是对结果使用GetName()方法,我猜在这种情况下,结果应该是严格相同的?
谢谢
发布于 2016-08-17 18:24:37
加载ReflectionOnly的程序集时,仅加载元数据。这允许您检查它的类型,但不能实例化或执行任何类型。
还有一个property indicating whether an assembly was loaded for reflection only。
因此,对于每个AppDomain,程序集只能加载一次:完全加载或仅用于反射。考虑到它已经完全加载,你不能只为反射而再次加载它。
即使提供了两个不同的路径,对Assembly.LoadFrom()的调用也只会加载一次相同的程序集,只要它们的版本匹配即可。另请参见Side effects of calling Assembly.Load multiple times。
另请参阅:MSDN: How to: Load Assemblies into the Reflection-Only Context。
https://stackoverflow.com/questions/38993857
复制相似问题