Ich habe die folgende Codezeile:IOException beim dynamischen Kompilieren von 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());
, die in einem IOException
führt geworfen.
Zusätzliche Informationen: Der Prozess kann nicht auf die Datei zugreifen 'C: \ Users \ Benutzername \ AppData \ Local \ Temp \ dgl5fb1i.err', weil es ist von einem anderen Prozess verwendet wird.
Dies ist jedoch ein Teil eines großen Programms, das mehr als 8 GB RAM verbraucht. Auf einem System mit 16 GB RAM wird diese Ausnahme nicht ausgelöst. Der dynamisch kompilierte Code wird gut kompiliert und ausgeführt. Das Programm läuft fehlerfrei auf einem System mit ausreichendem RAM. Das Programm ist für x64 kompiliert. Beachten Sie, dass ich keine OutOfMemoryException
oder irgendeinen Hinweis bekomme, dass das Programm nicht genügend Arbeitsspeicher hat. Im Task-Manager erreicht die Speicherauslastung fast die Spitze, bevor IOException
ausgelöst wird.
Was könnte dieses Verhalten verursachen und kann jemand eine Lösung vorschlagen?
EDIT
modifizierte ich die Anwendung wesentlich weniger Speicher zu verwenden. Der Fehler bleibt bestehen, obwohl die Anwendung über genügend verfügbaren Arbeitsspeicher verfügt. Das Problem tritt immer noch nur auf einem Computer auf.
Dies könnte mit dem folgenden Beitrag zusammenhängen: Prevent CompileAssemblyFromSource from generate temp files with duplicate file name.
gleiches Problem. Ich denke, ich brauche die gleiche Lösung ... Danke! –