我有下面的代碼行: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。
同樣的問題。所以我想我會需要相同的解決方案......謝謝! –