gpt4 book ai didi

c# - 动态编译代码时出现IOException

转载 作者:太空狗 更新时间:2023-10-29 21:43:34 25 4
gpt4 key购买 nike

我有以下代码行:

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 之前,内存使用率几乎达到顶峰。

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

编辑

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

这可能与以下帖子有关:Prevent CompileAssemblyFromSource from generate temp files with duplicate file name .

最佳答案

我正在并行运行多个编译。每次编译都需要更改临时目录,以免发生冲突。

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

关于c# - 动态编译代码时出现IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37048788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com