2010-12-06 54 views
2

.NET應用程序,我的工作可以延長它與C#腳本功能,投入配置文件和編譯這樣的:CodeDomProvider:是否可以卸載編譯代碼

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

我必須讓用戶更改配置文件,捕獲此事件並在運行時重新編譯腳本而不重新啓動應用程序。

我收到警告,以前的代碼仍會使用內存。我應該如何卸載編譯的代碼?

預先感謝您!

回答

1

AFAIK,唯一的方法是將其加載到單獨的AppDomain並殺死整個AppDomain。我想這意味着將大部分與編譯相關的代碼移到第二個AppDomain。然後問題變成如何交叉AppDomain;在那裏,隱式遠程處理是IMO最簡單的選擇。

+0

謝謝@Marc,我會調查這個選項 – 2010-12-06 07:49:18

1

由於您必須使用不同的AppDomain,因此您應該查看System.Addin命名空間。它簡化了可擴展性。關於SO的完整討論可以在這裏找到:Choosing between MEF and MAF (System.AddIn)

+0

謝謝@Simon。您指向我的討論更廣泛地涵蓋了這個問題。 – 2010-12-06 08:22:41

相關問題