当前位置: 首页 > 编程语言 > C#

自定义AppDomain和PrivateBinPath共享

时间:2023-04-10 17:42:17 C#

自定义AppDomain和PrivateBinPath我正在使用c#4.0和一个仅用于测试的控制台应用程序,以下代码确实给出了异常。AppDomainSetupappSetup=newAppDomainSetup(){ApplicationName="PluginsDomain",ApplicationBase=AppDomain.CurrentDomain.BaseDirectory,PrivateBinPath=@"Plugins",ConfigurationFile=AppDomain.CurrentDomain.SetupInformation.ConfigurationFile};AppDomainappDomain=AppDomain.CreateDomain("PluginsDomain",null,appSetup);AssemblyNameassemblyName=AssemblyName.GetAssemblyName(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Plugins","sample.dll"));AssemblyNameassembly=appDomain.Load(assemblyName);//这里给出Filenotfound的异常AppDomain.Unload(appDomain);在我创建的AppDomain上使用Load时,我不断收到Filenotfoundexception。谢谢。首先确保Plugins是AppDomain基本路径的子目录。PrivateBinPath仅适用于此处所述的子目录如果这不是问题,请查看您的融合绑定日志。还有一篇关于使用FusionLogViewer的好博文。Fusion日志会告诉您在哪里搜索程序集。这应该告诉您该路径是否包含在搜索中。另一种可能性是它正在寻找您的程序集而不是它的依赖项之一。同样,FusionLogViewer会告诉您。我想我会弄清楚为什么会这样,那是因为当前域需要加载程序集,即使你在不同的应用程序域中加载程序集,当前域也需要知道它并加载它,这是因为如何.NET的设计。单击此处了解详情。http://msdn.microsoft.com/en-us/library/36az8x58.aspx查看fusion日志的时候发现新建的app域已经成功能够从privatebin路径加载程序集了,为什么还得到“未找到文件”异常,因为这个异常原本属于当前应用程序域。这意味着如果将程序集复制到当前应用程序路径或当前域正在探测的路径,您会发现可以将程序集加载到自定义域中。希望有所帮助。我在尝试从bin目录以外的目录动态加载dll文件时遇到了这个线程。简而言之,我能够通过使用AppDomain.CurrentDomain.AssemblyResolve事件来实现这一点。这是代码://--开始示例:publicMyClass(){AppDomain.CurrentDomain.AssemblyResolve+=CurrentDomain_AssemblyResolve;}privateAssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){foreach(varmoduleDirin_moduleDirectories=fnewovar(moduleDir);varmodule=di.GetFiles().FirstOrDefault(i=>i.Name==args.Name+".dll");if(module!=null){returnAssembly.LoadFrom(module.FullName);}}returnnull;}//---结束示例("...")方法被调用。这个自定义事件处理程序使用您自己的自定义逻辑来完成定位程序集的工作(这意味着您可以将它指向任何地方,甚至在bin路径之外等)。我希望这可以节省几个小时...以上是C#学习教程:自定义AppDomain和PrivateBinPath分享的全部内容。收藏不代表立场,如涉及侵权,请点击右边联系管理员删除。如有转载,请注明出处: