我们在不同的文件夹中有两倍相同的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()方法,我想在这种情况下,结果应该严格相同?
由于
答案 0 :(得分:1)
为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。