2012-10-10 54 views
5

背景:我有兩個名爲「A」和「B」的程序集。 「」A「引用」B「。」A「也引用一些額外的dll(Microsoft.Enterprise Library.Data和Microsoft Enterprise Library.Common),我認爲它應該打包在nupkg中。NuGet包裝和引用DLL的

我相信我的nupkg包應該包含來自「A」,「B」和兩個「Microsoft Enterprise」程序集的程序集輸出,這樣當有人安裝我的程序包時,它將直接引用程序集「A」,其他三個程序集將可用但不能直接引用,從而使他們的應用程序將運行什麼是包裝不引用的DLL的正確方法

嘗試#1:?包裝所有需要的DLL在\ net35文件夾 按照NuGet documentation regarding the "references"元素「如果省略了該元素,那麼通常的行爲將適用,即引用lib文件夾中的每個程序集。」

因此,我假設通過使用此元素它將只包含指定爲引用的程序集。如果我也使用「文件」元素<file src=*.dll" target="lib\net35" />,這似乎不是這種情況。如果我有一個像這樣的元素將所有dll複製到包中,它會導致實現此包的程序集引用\ net35目錄中的所有程序集。這不是我想要做的。我期望一些魔法,只有在「引用」中指定的程序集纔會被實際引用,其他所有程序都將保留在展開的\ packages文件夾中,並且該應用程序可以工作,因爲所有的dll都位於相同的目錄中。也許我是不正確....

嘗試#2添加的內容時,該包裝在創建\ lib文件夾項目 如果我把未被引用的組件到\內容\ lib中,而不是LIB \ net35項目並直接將\ content \ lib dll轉儲到該項目中,然後強制我們將它們檢入到源代碼控制中。這工作,編譯和運行,但我真的不希望這些存儲在項目的\ lib文件夾中。

我正在尋找一個解決方案,其中項目獲得對「A」的引用,並且仍然可以與其他所需的程序集共同運行但不直接引用。似乎嘗試#1是正確的道路,但也許有一個錯誤?

僅供參考,我直接進入這個as a issue with NuGet看到它的團隊也有一個答案。

回答

3

這是的NuGet 2.1引入了一個錯誤,後來固定在其發佈於2012年12月

在原發布使用嘗試#1現在正常的NuGet版本2.2。

0

我不認爲你的「嘗試1」會在實踐中發揮作用。如果你只參考「A」。當你建立你的包時,只有「A」會被複制(默認)到輸出目錄。然後,當您分發應用程序時,只有「A」存在導致錯誤。

您應該引用所有DLL以使您的應用程序運行(或想出另一個解決方案,它會自動將引用的DLL複製到輸出目錄,但我不確定在指定引用時是否有很多值直)。由於您只有幾個DLL,因此最好省略參考部分,以便所有DLL都從lib文件夾中自動引用。

+0

這是NuGet 2.1中引入的一個迴歸/錯誤,他們已經糾正了這個問題,它將在本月的2.2版中得到修復。 – Jay