我正在尝试通过反射动态加载程序集。我有这样的文件夹结构:
project
\-- BIN
|-- myApp.exe
|-- SOMEEXTENTION1
| |-- someExtention1.dll
| \-- itsDependency1.dll
|
|-- SOMEEXTENTION2
|-- someExtention2.dll
\-- itsDependency2.dll
我可以加载一些扩展使用反射。执行过程中出现问题一些扩展寻找它的依赖关系。点网在 BIN 文件夹中查找。它在那里找不到它。 Appdomain 的 AssemblyResolve 事件被引发...
我正在捕获这个事件。在 ResolveEventArgs 中,我获取需要加载的程序集的名称。问题是我没有得到 RequestingAssembly。 ResolveEventArgs 的该属性始终为空。我需要请求程序集,以便我可以直接查看其自己的 EXTN 文件夹。如果没有它,我必须查看所有 EXTN 文件夹,就我而言,这些文件夹可能非常大。
RequestingAssembly 有一个属性 Location,根据这篇 msdn 文章,它包含物理文件的路径。this http://msdn.microsoft.com/en-us/library/system.resolveeventargs.requestingassembly.aspx文章还指出了该属性可能为 Nothing 的情况。我不明白那里讨论的负载上下文。
任何帮助将不胜感激...
根据我通过实验发现的情况(同样没有支持搜索结果),动态加载程序集时,文件夹名称必须与程序集名称不匹配。我不知道接下来会发生什么,但加载机制内部的某些东西出了问题。
顺便说一句,当使用 LoadFrom 方法加载程序集时,它会在“从上下文加载”中加载。在这种情况下,通过首先查看应用程序库,然后查看程序集自己的文件夹来解析依赖程序集。就我而言,这解决了解决依赖关系的问题。
不利的一面是,我发现如果加载无法解决依赖关系并且触发了 AssemblyResolve 事件,则请求程序集将不可用。这意味着无法确定请求程序集的路径。
当我使用 LoadFile 方法时,而不是使用加载来源,则不会自动从子文件夹解析依赖项。相反,AssemblyResolve 事件被触发。在这种情况下,尽管 ResolveEventArgs 将包含请求的程序集属性。用户代码可以从这里轻松确定目标路径。然后用户代码可以加载依赖项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)