我试图将dll加载到控制台应用程序中,然后将其卸载并完全删除文件。我遇到的问题是,将dll加载到其自己的AppDomain中的行为在父AppDomain中创建了一个引用,因此除非完全关闭程序,否则不允许我销毁dll文件。关于使此代码有效的任何想法?

string fileLocation = @"C:\Collector.dll";
AppDomain domain = AppDomain.CreateDomain(fileLocation);
domain.Load(@"Services.Collector");
AppDomain.Unload(domain);

顺便说一句我也没有运气尝试过此代码
string fileLocation = @"C:\Collector.dll";
byte[] assemblyFileBuffer = File.ReadAllBytes(fileLocation);

AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ApplicationBase = Environment.CurrentDirectory;
domainSetup.ShadowCopyFiles = "true";
domainSetup.CachePath = Environment.CurrentDirectory;
AppDomain tempAppDomain = AppDomain.CreateDomain("Services.Collector", AppDomain.CurrentDomain.Evidence, domainSetup);

//Load up the temp assembly and do stuff
Assembly projectAssembly = tempAppDomain.Load(assemblyFileBuffer);

//Then I'm trying to clean up
AppDomain.Unload(tempAppDomain);
tempAppDomain = null;
File.Delete(fileLocation);

最佳答案

好,所以我在这里解决了自己的问题。显然,如果您调用AppDomain.Load,它将在您的父AppDomain中进行注册。因此,答案很简单,根本不引用它。这是指向网站的链接,该网站显示了如何正确设置。

https://bookie.io/bmark/readable/9503538d6bab80

09-08 02:53