
[英]Strange behavior when loading assemblies and its dependencies programatically
[英]Loading assemblies and its dependencies
我的应用程序在运行时从特定子文件夹动态加载程序集。 这些程序集编译时依赖于其他程序集。 运行时尝试从应用程序目录加载这些内容。 但我想将它们放入模块目录中。
有没有办法告诉运行时dll在一个单独的子文件夹中?
我最近使用的一个很好的方法是为AppDomain的AssemblyResolve事件添加一个事件处理程序。
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
然后在事件处理程序方法中,您可以使用Assembly.Load,Assembly.LoadFrom覆盖之一加载试图解析的程序集,并从该方法返回它。
编辑:
基于您的其他信息,我认为使用上述技术,特别是自己解决对程序集的引用是唯一真正的方法,无需重组您的应用程序即可运行。 它给你的是CLR无法解决的每个程序集的位置可以在运行时由代码确定和加载...我在类似的情况下使用它来实现可插拔体系结构和程序集参考完整性扫描工具。
您可以使用清单文件中的<probing>
元素告诉Runtime在其组件文件的不同目录中查找。
http://msdn.microsoft.com/en-us/library/823z9h8w.aspx
例如:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
您可以使用应用程序配置文件中的<codeBase>
元素。 有关“ 通过代码库或探测查找程序集 ”的更多信息。
好吧,加载的程序集没有应用程序配置文件。
好吧,如果你在运行时知道特定的文件夹,你可以使用Assembly.LoadFrom 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.