Tôi có dòng mã sau đây:IOException khi động biên dịch mã
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());
mà kết quả trong một IOException
bị ném.
Thông tin thêm: Quá trình này không thể truy cập các tập tin 'C: \ Users \ Username \ AppData \ Local \ Temp \ dgl5fb1i.err' vì nó là được sử dụng bởi quá trình khác.
Tuy nhiên, đây là một phần của chương trình lớn tiêu thụ hơn 8GB RAM. Trên một hệ thống có RAM 16GB, ngoại lệ này không được ném. Mã được biên dịch động và hoạt động tốt. Chương trình chạy mà không có bất kỳ lỗi nào trên một hệ thống có đủ RAM. Chương trình được biên dịch cho x64. Lưu ý rằng tôi không nhận được OutOfMemoryException
hoặc bất kỳ dấu hiệu nào cho thấy chương trình hết bộ nhớ. Trong Trình quản lý Tác vụ, việc sử dụng bộ nhớ gần như đạt đến đỉnh trước khi số IOException
bị ném.
Điều gì có thể gây ra hành vi này và bất kỳ ai cũng có thể đề xuất giải pháp?
EDIT
tôi sửa đổi các ứng dụng để sử dụng ít bộ nhớ đáng kể. Lỗi vẫn tồn tại mặc dù ứng dụng có đủ bộ nhớ khả dụng. Vấn đề vẫn chỉ xảy ra trên một máy.
Điều này có thể liên quan đến bài đăng sau: Prevent CompileAssemblyFromSource from generate temp files with duplicate file name.
cùng một vấn đề. vì vậy tôi đoán tôi sẽ cần giải pháp tương tự ... cảm ơn! –