首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Assembly.ReflectionOnlyLoadFrom(assemblyPath).GetName() VS Assembly.LoadFrom(assemblyPath).GetName()

Assembly.ReflectionOnlyLoadFrom(assemblyPath).GetName() VS Assembly.LoadFrom(assemblyPath).GetName()
EN

Stack Overflow用户
提问于 2016-08-17 18:17:41
回答 1查看 568关注 0票数 1

我们在不同的文件夹中有两个相同的dll。

当我们加载第二个dll时,使用

代码语言:javascript
复制
Assembly.ReflectionOnlyLoadFrom(assemblyPath)

我们得到一个错误:

代码语言:javascript
复制
"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."

这是可以理解的,但当我们这样做的时候:

代码语言:javascript
复制
Assembly.LoadFrom(assemblyPath);

它工作得很好。

为什么?使用"ReflectionOnly“方法会有什么变化?

在我们的例子中,唯一的用法是对结果使用GetName()方法,我猜在这种情况下,结果应该是严格相同的?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38993857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档