10
我有一些C#代碼(我們稱之爲「腳本」)我在運行時編譯。它使用我用來訪問其功能的主程序中的一個接口。編譯完成後,我有CompilerResults.CompiledAssembly
,在這種情況下,我可以CreateInstance(Type)
。卸載CodeDom編譯程序集
一旦我完成了使用腳本,我想完全卸載。據我瞭解,我只能這樣做,如果我創建一個單獨的應用程序域: Loading DLLs into a separate AppDomain
我有一些專門針對我的執行問題:
- 如果我有多個腳本編譯並想卸載他們獨立,我必須爲每個創建單獨的應用程序域?
- 我應該使用哪些應用程序域名? GUID是一個好主意嗎?有什麼名字我應該避免可能衝突?
- 如果程序集位於單獨的應用程序域中,它是否會在訪問主程序中的接口時遇到任何問題?編譯前我正在做
ReferencedAssemblies.Add(typeof(Interface).Assembly.Location)
。 - 我可以使用
CompilerParameters GenerateInMemory=true
,還是必須將它保存在某個地方?
我很難讓這個工作,所以我做了一些更多的研究。看起來我需要做更多的工作才能使它工作:http://www.devsource.com/c/a/Using-VS/Dynamic-Plugins-Using-the-codeAppDomaincode-Class-to-Load -and-卸載碼/。除非在以後的版本中有新的東西? – 2009-09-23 16:18:57
看起來我很幸運。由於我使用.NET 3.5,我可以使用託管擴展框架。當然,我現在必須去了解它。 :) – 2009-09-23 16:42:03
看起來我得到了比我想要的更深的預期。 MEF實際上不能卸載程序集,因爲它不使用單獨的AppDomain。 MAF(System.AddIn)可以,但使用起來要複雜得多。 MAF和MEF可以一起使用。雖然我真的希望能夠卸載程序集,但我認爲這至少需要等待第2版。 – 2009-09-23 20:03:13