2011-09-27 105 views
14

假設我有以下解決方案,其中多個版本的相同代碼都針對不同的框架,我想從中生成一個nuget包。Nuget - 包含多個項目的解決方案(針對多個框架)

SharedLib.sln 
    SharedLib.Net35.csproj 
    packages.config 
    SharedLib.Net40.csproj 
    packages.config 
    SharedLib.Phone.csproj 
    packages.config 
    SharedLib.SL4.csproj 
    packages.config 

預期nupkg具有以下結構

SharedLib.1.0.nupkg 
    lib/net35/SharedLib.dll 
    lib/net40/SharedLib.dll 
    lib/sl4-wp/SharedLib.dll 
    lib/sl4/SharedLib.dll 

nuget.exe pack SharedLib.SL4.csproj將自動確定目標框架是SilverLight4並把二進制文件中lib/sl4

我知道我可以添加一個SharedLib.SL4.nuspec文件,一個<file>部分包含來自其他項目的二進制文件,但有沒有辦法讓nuget自動將組合的解決方案輸出放入適當的結構(並且還檢測所有項目的packages.config中的依賴項?

回答

8

不,現在除了編寫一個自定義構建腳本,將文件放在正確的位置,然後在其上運行NuGet包,或採取您描述的.nuspec方法之外,目前沒有辦法做到這一點。

這是我們想要的功能,但沒有想到一個好的方法來做到這一點。但是,您的帖子只是給了我一個想法。

今天,您可以將nuget pack指向.csproj文件。

我們可以考慮一種方法,允許您將它指向.sln文件,並且如果項目名稱遵循一些約定,我們會將所有項目打包到一個包中。

如果您確實需要此功能,請考慮在NuGet問題跟蹤器中記錄問題。 http://nuget.codeplex.com/workitem/list/basic

+0

我可能只是做,雖然我沒有完全做到搞清楚它是什麼,我想:) 1.這將是很好的解決方案,以點的NuGet並將它把事情做好 2.它如果生成的包內的不同框架版本可能具有不同的依賴關係,那將會很好。例如WP版本可能需要額外的軟件包來提供不屬於WP核心的類型。 我會將您的答案標記爲現在已被接受,並考慮在這個問題上多一點。 –

+4

在sln上運行nuget包會很好。我想在一個包中封裝一組相關的程序集,使它們比單獨的包更容易管理。他們不相互依賴。 – PenFold

+2

這是一個勝利的原因是建立服務器非常方便建立和發佈一個單一的項目包,但成爲一個噩夢,當你需要上述。對我而言,還有一些關鍵故事缺失,使得整個功能變得多餘。誰*不需要爲每個CLR打包? –

相關問題