【发布时间】:2009-09-23 19:37:50
【问题描述】:
可能重复:
how to delete the pluginassembly after AppDomain.Unload(domain)
在临时 AppDomain 中加载程序集以读取其 GetUsedReferences 属性时,我遇到了一个问题。一旦我这样做了,我调用 AppDomain.Unload(tempDomain) 然后我尝试通过删除文件来清理我的烂摊子。失败是因为文件被锁定。我卸载了临时域!任何想法或建议将不胜感激。这是我的一些代码:
//I already have btyes for the .dll and the .pdb from the actual files
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ApplicationBase = Environment.CurrentDirectory;
domainSetup.ShadowCopyFiles = "true";
domainSetup.CachePath = Environment.CurrentDirectory;
AppDomain tempAppDomain = AppDomain.CreateDomain("TempAppDomain", AppDomain.CurrentDomain.Evidence, domainSetup);
//Load up the temp assembly and do stuff
Assembly projectAssembly = tempAppDomain.Load(assemblyFileBuffer, symbolsFileBuffer);
//Then I'm trying to clean up
AppDomain.Unload(tempAppDomain);
tempAppDomain = null;
File.Delete(tempAssemblyFile); //I even try to force GC
File.Delete(tempSymbolsFile);
无论如何,删除失败,因为文件仍然被锁定。他们不应该因为我卸载了临时 AppDomain 而被释放吗?
【问题讨论】:
-
您自己动态编译程序集吗?如果是这样,那么您甚至可能不必将其作为文件保存。
-
我正在自己编译程序集。以下是我目前正在尝试的步骤: 1. 编译程序集 2. 为程序集和 .pdb 制作临时文件 3. 将它们加载到新的 AppDomain 中(严格来说,以便我可以尝试卸载它并释放文件) 4 . 加载一个程序集以便我可以得到它的引用 5. 卸载新的临时 AppDomain 6. 尝试清理临时文件 *但它们仍然被锁定 4.
标签: .net assemblies