2012-08-15 83 views
0

我动态加载dll(dll_1)并从中运行代码。当(dll_1)使用另一个dll(dll_2)时,会发生此问题。我无法在dll_1中嵌入dll_2。动态加载dll,其中包括外部库的引用

我使用Assembly.LoadFile,然后CreateInstanceInvokeMember加载dll。

我应该怎么办?

回答

2

如果我正确理解你的问题,你想要检测何时对组件的引用没有被解析并且能够调解以确保组件被正确加载。

您可以使用AppDomain.AssemblyResolveEvent来做到这一点。

+0

谢谢,这是一种解决方法。我可以检测到,dll_2是什么,它在哪里?然后加载它(dll_2)以供使用? – Calax 2012-08-15 18:04:42

+0

您可以检测*正在请求什么*程序集(该信息在事件参数中提供)。但是,由于您使用这种类型的解决方案,因此.NET不知道它所在的位置。它期待你提供这些信息。 – 2012-08-16 18:28:24

0

最简单的选择不是使用LoadFile,而是使用Load,因为它解析程序集的方式与常规程序集解析的工作方式相同。

下一个选项是预加载依赖关系,或者像Eric J建议的那样使用AssemblyResolveEvent。如果你走这条路线,请阅读Suzanne Cook's articles关于加载程序集和绑定上下文(请注意,在同一个博客中有更多相关文章)。

除从链接的文章:

LoadFrom优点:

组件可以从多条路径,不只是从下方ApplicationBase被加载。

将自动找到已经加载在此上下文中的依赖关系。

将自动找到与请求的LoadFrom上下文程序集相同的目录中的依赖项。