2013-04-08 200 views
16

我有一個我正在研究的包含4個類庫項目(ABCD)的解決方案。 AB可被視爲解決方案中的頂級項目。 AB參考文獻CD都是獨立的。在一個解決方案中從多個項目創建一個NuGet包

這四個項目代表了一組我處理自動化工作流的服務。它們都是密切相關的,只會在一個地方使用(服務經理),所以我不想將它們分成不同的解決方案。

我的問題是,我想創建一個NuGet包,它將包含所有4個庫,而無需全部構建它們並手動收集它們的DLL。我知道我可以通過AB參考剩餘的項目在技術上達到此目的,但這不是真正的關係,我認爲應該避免。

我已經做了大量的搜索這個問題,我找不到一個解決方案,而不是手動收集DLL並自己構建軟件包。有沒有辦法實現我想要使用NuGet的特性/功能的結果?

注意:如果標籤沒有說清楚我目前正在使用VS2010和TeamCity構建服務器。如果它是相關的,我也通過一個存儲服務器使用Git。

編輯:我剛剛意識到這可能是足夠重要的提及。這些項目會引用其他需要標記爲依賴關係的NuGet包。

+0

您是否使用的TeamCity的NuGet包構建步驟? – 2013-04-08 15:24:58

+0

@DavinTryon - 由於這個問題,我沒有在TeamCity中設置項目。這個解決方案的實際版本實際上是一個單獨的項目,現在它在SVN/CC.NET上。 – Logarr 2013-04-08 15:27:33

回答

11

你必須定義你自己的nuspec清單。你可以列出包含在files部分組件:

<file src="A\bin\Release\A.dll" target="lib\net40" /> 
<file src="B\bin\Release\B.dll" target="lib\net40" /> 
... 

有關詳細信息讀取NuSpec reference

然後在NuPack構建步驟中引用nuspec文件而不是proj。

9

如果你已經下載NuGet.exe 你可以運行:nuget pack Myproject.csproj -IncludeReferencedProjects這應該包括你所有的項目。以下是NuGet docs的註釋:

如果項目引用了其他項目,則可以將引用的項目作爲包的一部分添加或者作爲依賴項添加到-IncludeReferencedProjects選項中。這是遞歸完成的。例如,假設您有項目A.csproj,它引用B.csproj和C.csproj,而B.csproj引用D.csproj & E.csproj,C.csproj引用F.csproj & G.csproj。然後,當你運行:

nuget pack A.csproj -IncludeReferencedProjects 

生成的包將包含項目B,C,d,E,F & G,文件除了文件從項目A.

如果引用的項目有一個相同的名字相同的nuspec文件,那麼被引用的項目會被添加爲依賴項。使用相同的例子,假設現在在與項目文件C.csproj相同的目錄中存在文件C.nuspec。當您運行:

nuget pack A.csproj -IncludeReferencedProjects 

生成的包將包含除了從項目中的文件從項目B,d,E,文件和包裝對C.

依賴

另請參見Command line reference

+1

我實際上已經通過重新設計我的項目結構來解決這個問題。你的回答忽略了我在我的項目中概述的真實項目關係,這不是你解釋的樹。 – Logarr 2013-08-26 14:27:20

+2

@記者:你介意添加一個描述你如何解決它的答案嗎?謝謝! – 2016-04-06 14:23:18

+0

@Stécy - 我會盡力的。首先,我必須記住我指的是哪個解決方案... – Logarr 2016-04-06 15:56:58

相關問題