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

在不同的AppDomains中加载具有依赖关系的程序集共享

时间:2023-04-10 20:16:44 C#

在不同的AppDomains中加载具有依赖关系的程序集我的目标是对两个给定文件夹之间的缺失依赖项进行性别检查。想象一下以下设置。RootDIRAA.DLLRootDIRBB.DLLB依赖于A。因此,鉴于这些文件夹,我想创建一个新的AppDomain,加载B.dll并自动解析和隔离DirA(A.dll)的依赖项新的应用程序域。隔离是关键,因为当我卸载这个AppDomain时,我想创建一个新的,也许DirA再次作为依赖项,但DirC库需要它,所以如果DirC依赖于DirB,我希望它抛出异常。编辑:添加代码示例,以防它有助于更??好地描述我的问题。AppDomainSetupsetup=newAppDomainSetup();setup.ApplicationBase=@"C:Root";setup.ApplicationName="隔离域"setup.PrivateBinPath=@"DirA;DirB";setup.PrivateBinPathProbe="";//禁用在AppBase中的搜索//下面的语句理论上应该从DirA中获取B.dll的依赖.varassembly=domain.Load(AssemblyName.GetAssemblyName(@"C:RootDirBB.dll").Name);//在不同的域中为C.dll做同样的事情感谢您的帮助。这看起来像是ResolveEventHandler的工作(MSDN上有关解析未知程序集的更多详细信息)因此,您可以编写类似classMyResolver{publicstaticAssemblyMyResolveEventHandler(Objectsender,ResolveEventArgsargs){//confirmargs.NamecontainsA.dllStringdllName=args.Name.Split({','},SplitStringOptions.None)[0];如果(dllName=="A"){returnAssembly.LoadFile(@"C:RootDirAA.dll")}returnnull;在您创建的域中,您可以执行以下操作:domain.AssemblyResolve+=newResolveEventHandler(MyResolver.MyResolveEventHandler);确保在B中引用A之前绑定事件。AppDomain无法探测其初始文件夹之外的dll。他们可以在GAC中探查并深入到PrivateBinPath中的文件夹,但他们无法探查其他文件夹。以上就是C#学习教程:在不同的AppDomains中加载有依赖的程序集,分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: