2011-08-02 335 views
3

我對C#非常陌生,我的背景主要是C++/C++中的一些OOP。我確信我是錯誤地措辭這是爲什麼谷歌沒有幫助我,但在這裏。用多個項目編譯C#解決方案,不生成.dlls

我有兩個程序使用相同的類庫,當我將類庫添加到一個解決方案中,該解決方案包含一個類庫編譯爲.dll的程序,然後鏈接到主解決方案。是否有可能將庫代碼直接編譯到解決方案代碼中?

我可以通過導入類庫代碼到主項目層次做到這一點,但我不想這樣做,因爲我必須在兩個地方更新到庫中的任何改變..

我應該定義我的類庫是另一個實體,Visual Studio 2010的解決方案設置中是否有一個選項可以執行我想要的操作?

+0

有什麼具體的原因你爲什麼不創建dll? – Anand

+0

因爲我不想將.dll與發行版捆綁在一起.exe – jeremyb

回答

4

只需將包含類庫的文件通過引用添加到項目中,而不是作爲副本添加。

+0

我該怎麼做?庫在參考文獻中顯示的唯一方法是將其添加到解決方案中,並在將它添加爲參考文件後,它通過.dll進行鏈接。 – jeremyb

+0

右鍵單擊解決方案資源管理器中的項目,添加現有文件。選擇文件,而不是點擊添加按鈕,添加爲參考(添加爲參考用戶界面在VS2005/2008/2010之間變化)。 –

+0

完美,謝謝:)它是VS2010中的「添加爲鏈接」 – jeremyb

1

編輯:

您可以使用ILMerge到.dll和.exe文件結合起來。你不能在C#中靜態鏈接東西。它必須動態完成。


如果您編譯代碼的DLL和項目添加到另一個項目的引用,編譯器會自動類庫複製到相應的build文件夾。

C#可以在指定引用時自動查找應用程序需要的類,名稱空間和函數。無需導入任何頭文件等,因爲所有數據都存儲在DLL中的元數據中,而.net運行時將自動查找它。我也假設你正在使用C#庫。

+0

是的,我使用的是C#庫,但我希望能夠在處理任一程序時修改庫代碼,所以我認爲編譯.dll會禁止我這樣做。這個想法是我不想將.dll與我的.exe文件捆綁在一起。我想要使​​用.exe編譯的.dll代碼。 – jeremyb

+0

請參閱我的編輯。 –

+0

@ user642559:*爲什麼*你不想將DLL與你的EXE捆綁在一起?這是圖書館在.NET中正常工作的方式,並且遠離這種模式很可能會導致您在長期內進行更多的工作。 –

1

你在談論靜態鏈接。
有一個工具ILMerge它可以讓你做到這一點。
一般來說,在C#中,這比C++中的問題要少,因爲C#Assemblies/dll提供了程序集頭文件中的版本信息(您可以在Visual Studio中控制該信息),因此不存在DLL地獄的風險。

0

正如其他answerers已經說過的,正常的.net行爲引用的程序集只是複製到輸出文件夾中,而不是編譯到可執行文件中。

編譯後可以將它們合併到.exe中,但這不是默認設置,您需要額外的工具。
如果您對此感興趣,您可能需要查看ILMergeNETZ

相關問題