appDomain.Unload(domain)后如何删除pluginassembly我想删除加载的程序集(硬盘驱动器上的plugin.dll),但程序集被操作系统(Vista)锁定,即使我已经卸载了它。FEAppDomainSetupsetup=newAppDomainSetup();setup.ShadowCopyFiles="true";AppDomainappDomain=AppDomain.CreateDomain(assemblyName+"_AppDomain",AppDomain.CurrentDomain.Evidence,setup);IPlugin插件=(IPlugin)appDomain.CreateInstanceFromAndUnwrap(assemblyName,"Plugin.MyPlugins");我还需要assemblyinfos,因为我不知道pluginassembly中的哪些类实现了IPlugin接口。在一个Pluginassembly中应该可以有多个插件。程序集assembly=appDomain.Load(assemblyName);if(assembly!=null){Type[]assemblyTypes=assembly.GetTypes();foreach(TypeassemblyTypinassemblyTypes){if(typeof(IPlugin).IsAssignableFrom(assemblyTyp)){IPluginplugin=(IPlugin)Activator.CreateInstance(assemblyTyp);plugin.AssemblyName=assemblyNameWithEx;plugin.Host=这个;}}}AppDomain.Unload(appDomain);如何在不锁定程序集的情况下从appDomain获取程序集信息?最好的问候我想我有我的答案!如果您想删除已加载的程序集,?yvindSkaar的回答将不起作用。而不是使用(FileStreamdll=File.OpenRead(path)){fileContent=newbyte[dll.Length];dll.Read(fileContent,0,(int)dll.Length);}程序集assembly=appDomain.Load(fileContent);你必须使用byte[]b=File.ReadAllBytes(assemblyName);assembly=Assembly.Load(b);最好的问候我知道这篇文章已经死了,但我正在研究这个并且我得到了答案(凌晨1:30...)AppDomainSetupsetup=newAppDomainSetup();setup.ApplicationBase=AppDomain.CurrentDomain.BaseDirectory;AppDomainapp=AppDomain.CreateDomain("YaCsi",null,setup);app.DoCallBack(LoaderCallback);应用域。卸载(应用程序);File.Delete("__YaCsi_Test01.dll");staticvoidLoaderCallback(){byte[]raw=File.ReadAllBytes("__YaCsi_Test01.dll");组装yacsi=Assembly.Load(raw);((IScript)yacsi.CreateInstance("脚本")).Go();它实际上并没有抛出任何异常!希望有人会阅读这篇文章,它会在那里回答问题!如果您将程序集作为流加载,它应该可以工作。byte[]文件内容;字符串路径="../../../test/bin/Debug/test.dll";//插件程序集的路径使用(FileStreamdll=File.OpenRead(path)){fileContent=newbyte[dll.Length];dll.Read(fileContent,0,(int)dll.Length);}程序集assembly=appDomain.Load(fileContent);文件.删除(路径);请参阅以下页面:使用LoaderOptimization。MultiDomainHost设置新的AppDomainAppDomainSetup例如domainnew=AppDomain.CreateDomain(newdomain_name,null,newAppDomainSetup{ApplicationName=newdomain_name,ApplicationBase=assembly_directory,ConfigurationFile=ConfigurationManager.OpenExeConfiguration(assemblylocation).FilePath,LoaderOptimization=LoaderOptimization.MultiDomainHost,ShadowCopyFiles=shadowcopy?”真假”,});我们所做的是让一个文件夹监视程序集。添加程序集时,应用程序将其复制到一个临时目录,为其指定一个唯一的文件名,然后从那里加载它。当应用首次加载时,它会尝试清除临时目录。我认为这不能直接回答您的问题,但它可能会解决您的问题。以上就是C#学习教程:如何删除appDomain.Unload(domain)后pluginassembly共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
