首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定Assembly.Load()在何处搜索程序集?

如何确定Assembly.Load()在何处搜索程序集?
EN

Stack Overflow用户
提问于 2010-10-16 03:00:04
回答 3查看 2.5K关注 0票数 7

我有一个使用BinaryFormatter来反序列化对象的VS插件。为了解析这个对象的类型,它调用了Assembly.Load(objectTypeFullName),但是它触发了一个异常,因为Assembly.Load在它搜索的任何地方都找不到这个程序集。给定的程序集是外接程序程序集的同级程序集,但似乎Assembly.Load()在那里找不到它。

一种可能的解决方案是确定Assembly.Load应该在哪里查找程序集。

我该怎么办?

PS:我尽量不把这个程序集放在GAC上,因为我每次重新编译程序集时都需要更新它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-16 03:05:51

您可以使用AppDomainSetup.PrivateBinPath添加其他专用搜索路径。这可以通过AppDomain.SetupInformation检索到。

另一种选择是订阅AppDomain.AssemblyResolve,以便在它找不到程序集时覆盖该行为。

票数 4
EN

Stack Overflow用户

发布于 2010-10-16 04:37:57

下面的代码片段展示了如何使用AssemblyResolve来解析您的程序集(根据Reed Copey的回答):

代码语言:javascript
运行
复制
// register to listen to all assembly resolving attempts:
 AppDomain currentDomain = AppDomain.CurrentDomain;
 currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);


 // Check whether the desired assembly is already loaded
 private static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args) {
    string desiredAssmebly = args.Name;
    if (desiredAssembly.Equals("NameUsedToLoadMyAssembly")){
        return Assembly.LoadFrom(myAssemblyPath);
    }

    return null;
  }

另请注意,AssemblyResolve的MSDN页面声明:

从.NET框架版本4开始,ResolveEventArgs.RequestingAssembly属性返回请求无法解析的程序集加载的程序集...

如果您知道程序集相对于请求程序集的位置,则可以使用此方法。

票数 4
EN

Stack Overflow用户

发布于 2010-10-16 03:13:34

如果您只是试图确定程序集加载程序试图从何处加载dll,我建议您打开融合日志。这样做将使您能够获得输出,该输出将显示为相应的dll检查的每个路径。

其中有一个关于如何配置融合日志的MSDN article,还有一篇由Suzanne Cook撰写的关于如何调试加载失败的有用文章。如果启用LogFailures,则应仅获得加载失败的程序集的输出。

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

https://stackoverflow.com/questions/3945240

复制
相关文章

相似问题

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