加载程序集及其依赖项

我的应用程序在运行时从特定子文件夹动态加载程序集。 这些程序集使用依赖项编译到其他程序集。 运行时尝试从应用程序目录加载这些内容。 但我想将它们放入模块目录中。

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

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

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

然后在事件处理程序方法中,您可以加载尝试使用Assembly.Load,Assembly.LoadFrom之一覆盖的程序集,并从方法返回它。

编辑:

根据您的其他信息,我认为使用上述技术,特别是自己解决对程序集的引用是唯一可以在不重新构建应用程序的情况下工作的真正方法。 它给你的是CLR无法解决的每个程序集的位置可以在运行时由代码确定和加载……我在类似的情况下使用它来实现可插拔体系结构和程序集参考完整性扫描工具。

您可以使用清单文件中的元素告诉Runtime在其组件文件的不同目录中查找。

http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

例如:

        

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

好吧,加载的程序集没有应用程序配置文件。

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