c# – 创建文件后删除文件
所以我正在创建DLL类型文件,运行它们然后我想删除它们.
但是,当我尝试删除它们时,我得到一个例外,因为它声称它们仍在被另一个进程使用. 我假设用于创建文件的代码没有正确处理资源以允许删除文件之后,这里是我创建文件的代码. if (!Directory.Exists(PathToRobots + Generation)) { Directory.CreateDirectory(PathToRobots + Generation); } File.WriteAllText(Path.Combine(PathToRobots + Generation,NameSpace + GetRobotName() + robotNumber + ".cs"),code); CSharpCodeProvider provider = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters() { GenerateInMemory = false,GenerateExecutable = false,// True = EXE,False = DLL IncludeDebugInformation = true,OutputAssembly = Path.Combine(FileName + ".dll") // Compilation name }; parameters.ReferencedAssemblies.Add(@"robocode.dll"); CompilerResults results = provider.CompileAssemblyFromSource(parameters,code); if (results.Errors.HasErrors) { StringBuilder sb = new StringBuilder(); foreach (CompilerError error in results.Errors) { sb.AppendLine(String.Format("Error ({0}): {1}",error.ErrorNumber,error.ErrorText)); } throw new InvalidOperationException(sb.ToString()); } Assembly assembly = results.CompiledAssembly; provider.Dispose(); 删除文件的代码非常简单,如下所示, var files = Directory.GetFiles(DirectoryPath); foreach (var file in files) { File.Delete(file); } 知道为什么我不能删除文件? 解决方法
请参阅
CompilerResults.CompiledAssembly Property的注释
所以当你这样做时: Assembly assembly = results.CompiledAssembly; 您已将已编译的程序集加载到当前应用程序域中,因此已锁定该文件.为了能够删除生成的文件,您需要将其加载到单独的应用程序域中(this answer可能有助于执行此操作的具体细节). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |