2014-11-16 111 views
0

我有一個本質上是開發人員工具包的產品 - 一組用於特定用途的.NET程序集(僅編譯)。產品安裝還包括以源代碼形式以Visual Studio項目形式分發的用法示例。這些示例中的一部分引用了額外的NuGet包(這些包不在產品本身中使用)。具體而言,它是Rx-Main軟件包(適用於Microsoft Reactive Extensions),但也可以是其他軟件。發佈引用NuGet包的項目

在我的測試中,我從示例中引用了該包,確認了許可條件,觀察了所有文件(包括爲許多平臺構建的包裝程序集),並將它們添加到了我的安裝中。這有效,但有以下問題:

1)我不確定它是否符合許可證條件以這種方式重新分發軟件包。至少我期望在Visual Studio中打開項目時要求最終用戶重新確認軟件包許可條件,但這種情況並未發生。

2)包中的二進制文件不必要地包含在安裝中,使其變大。我可以安全地假設用戶有Internet連接並可以下載該軟件包。因此,我寧願只發佈一個「參考」包。只有當用戶真正需要這個例子時,他纔會下載引用包。

我試圖通過從項目/安裝中刪除'packages'目錄並只保留packages.config文件(它似乎包含軟件包標識/引用)來做到這一點。我希望當在Visual Studio中打開這樣的項目時,包會被檢測爲丟失並重新下載等。但它不起作用 - 它只是抱怨丟失的程序集(應該來自引用的程序包),並且使沒有嘗試加載包。

問題是,我該如何分配引用NuGet包的Visual Studio項目(以源代碼的形式),而不實際分發包本身?

回答

1

您很可能在尋找NuGet的package restore feature

+0

哦,太好了,是的。看起來我需要「自動軟件包恢復」選項。我沒有發現的原因是我故意在VS2012中有我的例子,並在VS2012中做了測試。看起來,VS2012有一個早期版本的NuGet,它沒有這個功能(或者沒有完整的功能,當然可用的部分默認是關閉的)。在VS2013中,默認情況下都是啓用的,根據您提供的MSDN鏈接,它應該完全符合我的期望。我接受的答案,雖然我還沒有測試過...... – ZbynekZ

+0

@ZbynekZ我相信它應該足以更新NuGet擴展。即使在VS2010中,我也看到了包恢復功能。 – jariq

+0

你說得對,它取決於NuGet版本,而不是VS版本。更新VS2012中的NuGet使其工作。這揭示了我應該在原始問題中提到的一個「隱藏」要求:我希望它能夠「開箱即用」安裝。而且,在VS2012中情況並非如此。我知道更新NuGet擴展並啓用必要的選項可以解決這個問題,但如果沒有它,我會更加高興。無論如何,我認爲它已經解決了,因爲在VS2013中它可以直接使用,並且VS2012正在被淘汰,我可以將它記錄在VS2012中。 – ZbynekZ