让我尝试解释一下我的问题。我目前正在尝试开发一个用.Net编写的小型“插件框架”(主要是为了进行一些实验)。因此,我们的想法是拥有一个主应用程序,可以通过在主应用程序的特定文件夹“插件”中部署 dll 来添加“插件”。
一切工作正常,插件已正确实例化,但是现在我遇到了问题。
我现在已经部署了一个使用其他第 3 方插件的插件“X”,因此现在我遇到的问题是“X”所需的这些其他第 3 方插件在运行时找不到。因此,我现在的想法是添加一个额外的目录“依赖项”,我也在其中部署所有需要的插件。
所以我的第一个问题是:
如何将程序集加载到应用程序域中(假设我知道它们的路径)它们可以被我的应用程序使用吗?
我尝试通过做类似的事情来解决这个问题:
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
//find the path to the assembly and then load and return it by
//return Assembly.Load("pathToDependencies/failedAssembly.dll");
}
问题是这个事件处理程序现在被激活,args 变量中有“Presentation.Zune.dll”(我使用的是 WPF 应用程序)。看起来该程序集加载失败,但实际问题是另一个 dll。
有人可以建议我更好的方法来解决我的问题吗?我希望我能够充分解释我的情况,否则只是要求进一步澄清。
谢谢,
树里
您可以设置运行时的探测路径,以便它可以找到程序集。设置probing应用程序配置文件中的元素。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="plugins;dependencies"/>
</assemblyBinding>
</runtime>
</configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)