Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改程序集解析程序搜索顺序_C#_Assemblies - Fatal编程技术网

C# 更改程序集解析程序搜索顺序

C# 更改程序集解析程序搜索顺序,c#,assemblies,C#,Assemblies,这与我昨天问的有关。简单地说,我遇到的问题是,我有两个相互冲突的程序集版本。一个在appbase中,另一个在PrivateBinPath中 据我所知,程序集解析器首先搜索appbase,然后在专用路径中搜索。问题是,根据我运行fusion log得到的结果,如果解析器在appbase中找到错误的版本,它会抛出一个错误,说版本不匹配并停止探测 我需要使用appbase中的引用,因此设置PrivateBinPathProbe不是一个选项,因为它排除了appbase。有没有办法先更改PrivateBi

这与我昨天问的有关。简单地说,我遇到的问题是,我有两个相互冲突的程序集版本。一个在appbase中,另一个在PrivateBinPath中

据我所知,程序集解析器首先搜索appbase,然后在专用路径中搜索。问题是,根据我运行fusion log得到的结果,如果解析器在appbase中找到错误的版本,它会抛出一个错误,说版本不匹配并停止探测

我需要使用appbase中的引用,因此设置PrivateBinPathProbe不是一个选项,因为它排除了appbase。有没有办法先更改PrivateBinPath中的搜索顺序


顺便说一句,我不明白为什么解析器在发现错误的版本时就放弃了。

可能没有这样做的选择

但是,您可以实施一种变通方法:

  • 设置
  • 实现该处理程序,以便以任何首选顺序搜索所需的任何位置

另一个选项是将依赖项嵌入到EXE/DLL中,因此根本不需要搜索任何路径-有关实现此目的的选项,请参见。

只有在上一次查找未成功时才会调用
AssemblyResolve
事件。因此,您必须将Yahia的方法与您前面问题的答案结合起来:

  • 设置
    PrivateBinPathProbe
    ,使Fusion不会在AppBase目录中查找
  • 实现解析AppBase目录路径的
    AssemblyResolve
    事件
  • 利润
    第一步很重要,以便触发事件。

    可能我做错了什么,但我尝试跟踪处理程序捕获的所有AssemblyResolve事件,而我的却从未出现过。@user472875若并没有更多的细节/源代码等,很难诊断。一种可能的解释是,将一个程序集的两个不同版本加载到同一个进程中可能会导致奇怪的效果…情况略有不同,但实际上,我解包到PrivateBinPath中的资源实际上嵌入到核心DLL中。我的一个选择是使用文件路径上的assembly.LoadFrom手动加载程序集。这是一个我很想避免的黑客行为。@user472875为什么要解包?只需实现核心DLL,这样它就可以通过自己的AssemblyResolve处理程序直接从资源中加载它们……我制作的是一个插件,而基础应用程序(解包的应用程序)正在执行所有其他步骤。我不能把这个逻辑搞得太乱,因为已经有了其他几个插件。否则,我可以实现类似aKzenT的解决方案的东西。程序集是否命名为强名称?我们谈论的是两个具有不同程序集版本的文件,还是相同程序集版本和不同文件版本的文件?@mike z:strong命名程序集,不同版本。