2012-06-04 40 views
3

假設我想編寫一個小程序,我們可以給它一個.CS文件,它可以爲我們編譯並說出是否有編譯錯誤。所以我爲此使用了CodeDom。 當我想要使用CodeDOM時,我必須添加這些DLL名稱,以便我可以在運行時加載它們。 是這樣的:我們是否真的需要硬編碼的DLL

CompilerParameters parameters = new CompilerParameters(); 
    parameters.ReferencedAssemblies.Add("System.dll"); 
    parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); 

但也存在一些問題,這種做法: 我如何確保我已經imcluded所有必要的DLL? 是唯一的方法嗎?有沒有更好的方法,而不是像這樣添加這些DLL?

謝謝。

回答

4

你不需要硬編碼任何東西。想象一下,在循環中調用Add(),使用從文本文件中讀取的DLL名稱(或在運行時在目錄中找到)。你有所有的工具你需要寫一些非常靈活的東西。

+0

使用從文件中讀取的DLL名稱?你能解釋一下嗎?謝謝。 – Bohn

+0

.CS文件的作者可能還會在第二個文件中提供一個DLL列表,每行一個。您的程序可以讀取該文件,並在讀取每行後,將讀取的字符串傳遞給「Add()」的調用。 –

+0

哦,我看到了...仍然像是輸入它們......是的,它並不是很難在源代碼中編碼......但仍然難以在文本文件中的其他地方編碼......想知道我們是否可以分析源代碼通過一些Reflection Magic的代碼,找出需要什麼DLLS並在運行時添加這些代碼? – Bohn

3

如果通過硬編碼,你的意思是明確指定要包含的dll(無論它們來自文本文件還是源文件),那麼NO就沒有任何方法讓CodeDom找出這個源自使用的類給定的名字可以存在於'任何'程序集中。所以你作爲開發者必須指定你指的是哪個程序集。

在你的情況下,如果你將源代碼作爲輸入,你也可以讓inputer指定引用的庫。你無法可靠地猜出它們。

+0

「你也可以要求輸入器指定引用的庫。」你能否解釋一下這個部分。謝謝。 – Bohn

+0

@BDotA如果程序的用戶指定源文件,他也可以在某些文本框中鍵入他在源代碼中使用的程序集。 –

+0

啊我看到了...不幸的是,這不是我的選擇..想知道如果我們可以通過一些反射魔法來分析源代碼並找出需要什麼DLLS並在運行時添加這些? – Bohn

相關問題