C# 关闭c应用程序后删除DLL
我有一个c应用程序,其中包括各种esternal DLL。当应用程序启动时,DLL在.exe文件夹中被解压缩,以允许正确执行。 代码如下:C# 关闭c应用程序后删除DLL,c#,dispose,C#,Dispose,我有一个c应用程序,其中包括各种esternal DLL。当应用程序启动时,DLL在.exe文件夹中被解压缩,以允许正确执行。 代码如下: var executingAssembly = Assembly.GetExecutingAssembly(); string folderName = string.Format("{0}.Resources.DLLs", executingAssembly.GetName().Name); var list = executingAssembly .G
var executingAssembly = Assembly.GetExecutingAssembly();
string folderName = string.Format("{0}.Resources.DLLs", executingAssembly.GetName().Name);
var list = executingAssembly
.GetManifestResourceNames()
.ToArray();
foreach (var item in list)
{
File.WriteAllBytes(item.Replace("myapp.DLLs.", ""),
ReadAllBytes(executingAssembly.GetManifestResourceStream(item)));
}
关闭表单时,我希望删除与表单关闭事件关联的具有以下代码的文件:
private void CleanFiles(Object sender, FormClosingEventArgs e)
{
var executingAssembly = Assembly.GetExecutingAssembly();
string folderName = string.Format("{0}.Resources.DLLs", executingAssembly.GetName().Name);
string folder = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
var list = executingAssembly
.GetManifestResourceNames()
.ToArray();
foreach (var item in list)
{
File.Delete(folder + @"\" + item.Replace("myapp.DLLs.", ""));
}
}
如果我打开然后关闭窗体,它会工作得很好。但是,如果我打开表单,执行一些操作,它会在关闭操作期间引发异常,因为对DLL的访问被拒绝。
如何释放所有DLL/资源 您可以而且应该在系统上操作文件的部件周围实施异常处理: 尝试 { //在这里操作您的文件。 } 捕获异常 { //在此处处理异常。如果愿意,也可以在此处删除DLL。 //如果文件已被删除,请记住签入CleanFiles。 } 最后 { //你也可以把这里的文件处理掉。 //最后,无论是否引发异常,都会执行块。 }
有用链接:,我假设如果您复制这些DLL,您将在以后加载并使用它们 动态加载DLL有一个小问题,那就是您不能仅仅卸载它们。一旦加载到您的应用程序域中,它们就会留在这里 因此,解决方案是简单地创建一个新的应用程序域,在其中加载DLL,完成后卸载这个新的应用程序域 比如:
var dynamicDomain = AppDomain.CreateDomain("YourDomainName");
var dynamicallyLoadedAssembly = dynamicDomain.Load("YourAssembly");
// do stuff with your dynamically loaded assembly
AppDomain.Unload(dynamicDomain);
有关此主题的更多信息:.我不会从使用DLL的进程中删除DLL,而是启动另一个进程,该进程的工作不只是删除文件。虽然没有错,但它实际上没有回答问题。这捕获了异常,但是解决不了问题。我不知道哪里解决不了问题?当抛出异常时,他无法删除文件。捕获异常,删除文件,解决问题。还是我理解错了什么?英语不是我的母语,如果我误解了这个问题,很抱歉。不:如果他试图在catch或finally块中删除该文件,他将再次遇到相同的异常。如果该文件正在使用中,您会收到一个错误,说我无法删除该文件,因为该文件正在使用中,然后忽略错误并重试只会产生相同的结果。。。这个错误。