使用程序集名称(而不是路径)加载不在web应用程序的GAC或bin目录中的程序集

本文关键字:程序集 GAC web 应用程序 bin 路径 加载 | 更新日期: 2023-09-27 18:02:17

我有一个dll是在目录xyz。有没有一种方法来加载dll实际上没有指定路径?
我知道我可以通过指定dll的路径来加载它,但后来我遇到了一个非常恼人的问题,它迫使我将该dll复制到我的应用程序bin目录并使用其名称加载它。
我宁愿不把dll放在bin目录中。那么,是否有一种方法来加载程序集使用它的名字,实际上不是位于GAC或bin目录?
我可以做些什么来让我的web应用程序扫描程序集的其他目录?

使用程序集名称(而不是路径)加载不在web应用程序的GAC或bin目录中的程序集

您可能需要查看程序集探测

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2'subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>

,也检查这里:运行时如何定位程序集:http://msdn.microsoft.com/en-us/library/15hyw9x3(v=VS.100).aspx

你可以在app.config中指定在哪里查找程序集。

<configuration>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin2'subbin;bin3"/>
      </assemblyBinding>
   </runtime>
</configuration>
  • 通过使用Probing元素

您可以在web.config中使用probing元素。
然而,我怀疑这是否解决了你在另一个问题上的问题。

作为基于配置的答案的另一种方法,您可以注册AppDomain。AssemblyResolve事件。

这让你有机会在程序集解析失败时运行一些代码,这样你就可以尝试在运行时纠正问题(例如,如果你觉得很漂亮,你可以对dll运行递归目录搜索)。

这可能比使用配置更灵活,但代价是一些额外的复杂性。