动态编译代码时出现IOException

IOException when dynamically compiling code

我有下面一行代码:

CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());

这导致 IOException 被抛出。

Additional information: The process cannot access the file 'C:\Users\Username\AppData\Local\Temp\dgl5fb1i.err' because it is being used by another process.

但是,这是消耗超过 8GB RAM 的大型程序的一部分。在具有 16GB RAM 的系统上,不会抛出此异常。动态编译的代码可以很好地编译并运行。该程序在具有足够 RAM 的系统上运行时没有任何错误。该程序是为 x64 编译的。请注意,我没有收到 OutOfMemoryException 或程序内存不足的任何指示。在任务管理器中,在抛出 IOException 之前,内存使用率几乎达到最高。

是什么导致了这种行为,有人可以提出解决方案吗?

编辑

我修改了应用程序以使用更少的内存。即使应用程序有足够的可用内存,错误仍然存​​在。问题仍然只出现在一台机器上。

这可能与以下内容有关 post:Prevent CompileAssemblyFromSource from generate temp files with duplicate file name

我是运行几个并行编译的。每次编译都要更改临时目录,以免发生冲突。

CSharpCodeProvider prov = new CSharpCodeProvider();
CompilerParameters parms = new CompilerParameters();
parms.TempFiles = new TempFileCollection(tempdir);