2010-12-06 5 views
2

.NET-Anwendung ich kann arbeiten, es ist Funktionalität mit C# Skripte erweitern, die in Konfigurationsdatei gesetzt werden und so zusammengestellt:CodeDomProvider: Ist es möglich, Code kompiliert zu entladen

CodeDomProvider provider; 
... 
var result = provider.CompileAssemblyFromSource(prms, new[] { scriptCode }); 
var asm = result.CompiledAssembly; 
var t = asm.GetType("ScriptClass"); 
var scriptInstance = (IScript)Activator.CreateInstance(); 

Ich habe Benutzern zu ermöglichen, Ändern Sie die Konfigurationsdatei, fangen Sie dieses Ereignis ab und kompilieren Sie Skripte in Runtime neu, ohne dass die Anwendung neu gestartet werden muss.

Ich bin gewarnt, dass der vorherige Code immer noch Speicher verwendet. Wie soll ich kompilierten Code entladen?

Vielen Dank im Voraus!

Antwort

1

AFAIK, der einzige Weg dies zu tun ist, es in eine separate AppDomain zu laden und die gesamte AppDomain zu töten. Ich stelle mir vor, dass dies bedeutet, viel von dem Code zu bewegen, der sich auf bezieht, das es zu dem zweiten AppDomain auch zusammenbaut. Dann wird die Frage, wie man über Kreuz spricht: AppDomain; Dort ist das implizite Remoting die einfachste Option.

+0

Vielen Dank @Marc, ich werde diese Option untersuchen –

1

Da Sie verschiedene AppDomains verwenden müssen, sollten Sie sich den Namespace System.Addin ansehen. Es erleichtert die Erweiterbarkeit. Eine vollständige Diskussion über SO ist hier verfügbar: Choosing between MEF and MAF (System.AddIn)

+0

Vielen Dank @Simon. Die Diskussion, auf die Sie mich hinweisen, deckt das Problem allgemeiner ab. –

Verwandte Themen