2008-08-27 58 views
3

使用VS2005和VB.NET。編譯引用的dll

我有一個項目是我創建的數據存儲的API。編譯時創建api.dll

我有相同的解決方案中的第二個項目,有一個項目引用的API項目,編譯時將創建wrapper.dll。這基本上是特定於應用程序的API的包裝。 當我在其他應用程序中使用wrapper.dll時,我必須將wrapper.dllapi.dll複製到我的新應用程序中。我怎樣才能讓包裝項目自己編譯api.dll,以便我只有一個dll移動?

回答

1

@Jas,這是Visual Studio中的一個特殊功能。程序概述於this blog entry, called "Sharing a Strong Name Key File Across Projects"。該示例用於共享強名稱密鑰文件,但適用於任何類型的文件。

簡而言之,您右鍵單擊您的項目並選擇「添加現有項目」。瀏覽到要鏈接的文件的目錄並高亮顯示一個或多個文件。只需點擊「添加」或「打開」(取決於您的Visual Studio版本),點擊該按鈕右側的向下箭頭。如果您在2005年使用Visual Studio 2003或「添加」或「添加爲鏈接」(我不確定2008年),您將看到「打開」或「鏈接文件」的選項。無論如何,請選擇涉及「鏈接」一詞的鏈接。那麼你的項目將基本上引用這個文件 - 它可以從它所在的原始項目和你「鏈接」到的項目中訪問。

這是創建包含wrapper.dll和api.dll所有功能的程序集的一種便捷方式,但是您必須記得在每次將新文件添加到api.dll時重複此過程(但不包括wrapper.dll)。

1

您可能必須使用工具(如ILMerge)來合併這兩個程序集。

1

有一個更簡單的方法。只需在您的wrapper.dll項目中創建指向api.dll中的源文件的快捷方式(在Visual Studio中稱爲鏈接文件)。這將直接將你的源碼編譯成wrapper.dll。

+0

字面上是一個Windows的快捷方式或有一些方法來添加一個「鏈接的文件」,通過VS?我找不到任何引用添加鏈接文件的能力。 – Jas 2008-08-27 19:08:30

0

我認爲你可以編譯api.dll作爲一個資源到wrapper.dll。然後從api.dll手動訪問該資源並手動加載它。我手動從磁盤加載程序集,因此從Stream加載一個不應該有任何不同。

我會嘗試將dll包含在項目中作爲一個文件,類似於包含文本或xml文件(除了其編譯的項目引用)。然後我會將構建操作設置爲「Embedded Resource」。在wrapper.dll中,我將使用Assembly對象來訪問api.dll,就像任何其他嵌入式資源一樣。您將然後還想要使用Assembly.Load加載程序集http://msdn.microsoft.com/en-us/library/system.reflection.assembly.load.aspx