2011-02-23 46 views
10

我有我的本地nuget庫存儲庫,分別用於我的個人和工作關聯類庫。在生成後事件中更新本地nuget包

我已經爲不再處於開發階段的庫創建了一些nuget包。我只爲他們做了這些,因爲我不知道如何在項目建立後自動更新它們。

我已經想通過使用Visual Studio命令提示符的nuget命令行完成所有工作。所以,我可以很容易做到我所需要的工作(當然我會完全知道的命令,我不!)

基本上我想下面的任務在我的項目的生成後事件執行。

在項目構建:

  1. 複製項目的dll到一個特定的文件夾(NuGet包的lib文件夾)
  2. 更新爲新的文件版本nuspec文件(我的項目是在每次構建增加文件版本)
  3. 創建新的文件版本

菲爾哈克新nupkg文件顯示了一些這方面的功能,但它仍然是一個原型,據我可以告訴。

所以我的要求是上述。有沒有其他人完成了這個?

回答

6

傑里米斯金納寫了a blog post關於他如何執行包的自動構建並將其上傳到NuGet Gallery。我認爲它符合你的要求。

基本上他使用MsBuild將版本(與MsBuild Community Extensions UpdateXml任務)應用到nuspec文件並調用nuget.exe進行打包。

9

所選擇的解決方案看起來像它會工作,但它好像有你的要求,簡單的解決方案。

您可以創建一個nuspec文件,該文件將讀取項目元數據中的數據。你只需要使用此命令來完成這一次,

C:\<Path to project>\nuget spec 

這將在會由項目的元數據,當您創建NuGet包被替換的規格文件「令牌」。這包括文件版本。你會想要替換,因爲所有項目在技術上都假設有它們。

更多細節可以在這裏找到:http://docs.nuget.org/docs/creating-packages/Creating-and-Publishing-a-Package#From_a_project

則...

對於.NET框架(老派)項目,在你項目的建設後,你可以做這樣的活動:

nuget pack "$(ProjectPath)" 
xcopy "$(TargetDir)*.nupkg" "<path where you are hosting your local nuget repo>" /C /Y 

(假設nuget.exe可用您的系統PATH)。

對於.Net核心和標準項目,nuget無法打包它們(請參閱https://github.com/NuGet/Home/issues/4491)。相反,用它作爲您的生成後步驟:

dotnet pack "$(ProjectPath)" --no-build --include-source --include-symbols --output "<path where you are hosting your local nuget repo>"

當然,你可以調整的選項,以滿足您的需求。有關dotnet pack命令選項,請參見https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x

+6

如果你想設置輸出目錄,你也可以避免兩步過程。另外,您可能需要考慮是否需要包含依賴關係: nuget pack「$(ProjectPath)」-outputdirectory「c:\ NuGetPackages」-IncludeReferencedProjects – 2014-07-03 16:02:21

+0

這對於不會暴露遠程NuGet Feed打包路徑作爲共享。 – 2015-11-09 20:43:17

0

我最近發佈了一個解決方案,在構建期間實際創建/更新nuspec文件,因此不必手動執行,然後創建nupkg文件。

您只需添加一個生成後事件即可將軟件包複製到目標位置(或將其作爲可選階段添加到我的解決方案中)。

您可以在walk-through guide heresource code + binary here之間找到一篇文章。