关于c#:加载程序集及其依赖项

关于c#:加载程序集及其依赖项

Loading assemblies and its dependencies

我的应用程序在运行时从特定的子文件夹动态加载程序集。 这些程序集的编译依赖于其他程序集。 运行时尝试从应用程序目录中加载它们。 但是我想把它们放到modules目录中。

有没有办法告诉运行时dll在单独的子文件夹中?


我最近使用的一种不错的方法是为AppDomain的AssemblyResolve事件添加一个事件处理程序。

1
2
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);

然后,在事件处理程序方法中,可以使用Assembly.Load,Assembly.LoadFrom替代之一加载尝试解析的程序集,然后从该方法返回它。

编辑:

根据您的其他信息,我认为使用以上技术,特别是自己自行解决对程序集的引用是唯一有效的方法,无需重组应用程序即可。它给您的是,可以在运行时由代码确定并加载CLR无法解析的每个程序集的位置。在可插拔体系结构和程序集引用完整性中,我在类似的情况下使用了此方法扫描工具。


您可以在清单文件中使用元素,告诉运行时在不同目录下查找其汇编文件。

http://msdn.microsoft.com/zh-CN/library/823z9h8w.aspx

例如。:

1
2
3
4
5
6
7
<configuration>
 <runtime>
 
     <probing privatePath="bin;bin2\\subbin;bin3"/>
  </assemblyBinding>
 </runtime>
</configuration>

您可以使用应用程序配置文件中的元素。有关"通过代码库或探针查找程序集"的更多信息。

Well, the loaded assembly doesn't have
an application configuration file.

好吧,如果您知道运行时的特定文件夹,则可以使用Assembly.LoadFrom。


推荐阅读