C#学习教程:加载程序集时依赖于另一个域的FileNotFound我有MainLib.dll,我用1种方法创建了一些commnon接口(让它成为ICommon)。然后我制作了2个引用MainLib.dll的.dll(插件)并在某些类中实现了ICommon。此外,我删除了所有对此.dllsexept系统的引用。然后我创建了一个应用程序来监视文件夹“.\Plugins”并加载newDomain的所有.dll,检查.dll中的类型是否实现了ICommon(因此该应用程序还引用了MainLib.dll)。如果是-在某些列表中添加.dll的名称。现在问题出现了:在我尝试加载插件之前-我将MailLib.dll和系统加载到newDomain中,因为所有插件都依赖于这个.dll。它们加载正确。然后,我开始加载插件,这里有:FileNotFoundException,无法加载文件或程序集“PluginWithException,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。)上的字符串loadedAssembly=domain.Load(Assembly.LoadFrom(asm).FullName);PluginWithException程序集只有2个依赖项-System和MainLib。在尝试加载PluginWithException之前,我检查了新域中的程序集,System和MainLib已加载到该域中。所以我没有看到任何依赖性问题。我阅读了这个主题并将ProxyDomain解决方案与ProxyDomain一起使用,但例外是相同的。我做错了什么?代码如下:publicstaticListSearchPlugins(string[]names){AppDomaindomain=AppDomain.CreateDomain("tmpDomain");域.Load(Assembly.LoadFrom(@".MainLib.dll").FullName);domain.Load(@"System,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089");MessageBox.Show(GetAssembies(域));//在这里我可以看到System和MailLib存在于新的域中Listplugins=newList();foreach(名称中的字符串asm){AssemblyloadedAssembly=domain.Load(Assembly.LoadFrom(asm).FullName);//这里我有异常vartheClassTypes=fromtinloadedAssembly.GetTypes()wheret.IsClass&&(t.GetInterface("ICommonInterface")!=null)selectt;如果(theClassTypes.Count()>0){plugins.Add(asm);}}AppDomain.Unload(域);返回插件;您没有指定如何设置AppDomains的搜索路径,以便它可以在插件目录中找到DLL,但您的问题听起来可能与我昨天回答的问题非常相似:AppDomain.Load()failswithFileNotFoundException也许这会也解决你的问题?让我知道你是怎么做的。您可能想告诉域从何处加载程序集:AppDomaindomain=AppDomain.CreateDomain("tmpDomain",null,newAppDomainSetup{ApplicationBase=Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Plugins")});但是,我不明白为什么程序集被加载到当前(默认)域和tmpDomain中。以上是C#学习教程:加载程序集时,依赖于另一个域的FileNotFound共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
