我有下面的代码行:IOException异常时动态编译代码
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
被抛出。
附加信息:过程不能访问该文件 'C:\ Users \用户名\应用程序数据\本地\ TEMP \ dgl5fb1i.err',因为它是被另一个过程 。
但是,这是大型程序的一部分,它消耗了超过8GB的RAM。在具有16GB RAM的系统上,不会抛出此异常。动态编译的代码很好地编译并运行。该程序在有足够RAM的系统上运行时没有任何错误。该程序是为x64编译的。请注意,我没有收到OutOfMemoryException
或任何有关该程序内存不足的迹象。在任务管理器中,在抛出IOException
之前,内存使用率几乎达到顶部。
什么可能导致这种行为,任何人都可以提出解决方案?
EDIT
我修改应用程序使用基本上更少的内存。即使应用程序具有足够的可用内存,错误仍然存在。该问题仍然只发生在一台机器上。
这可能与以下帖子有关:Prevent CompileAssemblyFromSource from generate temp files with duplicate file name。
同样的问题。所以我想我会需要相同的解决方案......谢谢! –