TFS - 自製內部 NuGet 套件

-- Pageviews

TFS - NuGet Feed

最近在測試 Team Foundation Server 2017,發佈公司內部用的自製 NuGet 套件。
過程沒有很順利,遇到一些問題,又有被雷到的感覺,筆記一下 TFS 發佈內部自製 NuGet 套件的失敗歷程。

1. 套件來源

新增一個自訂的套件來源位置,把接下來要發佈的套件指向這裡,其他人要安裝或更新 NuGet 套件,都是從這邊提取。
步驟如圖:
TFS - Create Packages Feed - 1 TFS - Create Packages Feed - 2

建立完成後,把 Feed URL 複製起來,等等會用到。

2. 建立 Build 定義

建立 NuGet 套件的 Build 定義,步驟如圖:
TFS - Create Packages Build - 1 TFS - Create Packages Build - 2 TFS - Create Packages Build - 3 TFS - Create Packages Build - 4 TFS - Create Packages Build - 5

3. Build

Failed…
TFS - NuGet Packager Error

失敗歷程

NuGet Packager Error - NuGet version

打包 NuGet 套件的時候發生錯誤:

‘xxxxx’ already has a dependency defined for ‘NETStandard.Library’.
System.Exception: Unexpected exit code 1 returned from tool NuGet.exe
PowerShell script completed with 1 errors.

TFS - NuGet Packager Error - 1

解法:
我用到 NETStandard.Library,必須要用新版的 NuGet。
到套件來源下載最新版的 nuget.exe,這個連結會到微軟官網下載最新版的 nuget.exe。如圖:
TFS - Download NuGet.exe

下載完成後,放到 TFS 上面,並指定路徑:
TFS - Setup NuGet.exe path

NuGet Packager Error - Test Project

再次打包 NuGet 套件,又發生錯誤:

Unable to find ‘D:\TfsData\agent-2.112.0_work...\xxxxx.Common.Tests.dll’. Make sure the project has been built.
System.Exception: Unexpected exit code 1 returned from tool NuGet.exe
PowerShell script completed with 1 errors.

TFS - NuGet Packager Error - 2

解法:
打包 Test Project 會有問題,所以就把 Test Project 排除:

**\*.csproj;-:**\*.*Test*.csproj

TFS - Exclude Test Project

NuGet Publisher Error - Package version

再次打包 NuGet 套件,又發生錯誤:

Response status code does not indicate success: 409 (Conflict).
Error: D:\TfsData\NuGet.exe failed with return code: 1
Packages failed to publish

TFS - NuGet Publisher Error - 1

解法:
沒有打版號會出錯,設定自動打版號。如圖:
TFS - Automatic package versioning TFS - Automatic package versioning

打出來的版號會是 1.日期.今天Build次數
E.g.: 1.20170524.1

終於發佈成功,但開心的太早,因為第一次成功,第二次之後都失敗…
舊的 *.nupkg 一直留在 Build Agent 的 _work 目錄中,所以被誤判發佈相同版本,而 NuGet 不允許重複發佈同版本。

Response status code does not indicate success: 409 (Conflict).
##[error]Error: D:\TfsData\agent-2.112.0_work_tasks\NuGetPublisher_333b11bd-d341-40d9-afcf-b32d5ce6f25b\0.2.30\node_modules\nuget-task-common\NuGet\3.5.0\NuGet.exe failed with
##[error]Packages failed to publish

TFS - Build Agent - status

解法:
把 Build Agent 的 _work 目錄中 *.nupkg 清除:
TFS - Remove nupkg - 1

**/*.nupkg

TFS - Remove nupkg - 2

終於可以每次都發佈成功啦~~~
(Code沒錯的情況下…)

Visual Studio

到 NuGet 管理員加入新的 NuGet 來源,貼上 Feed URL
就可以看到自訂的 NuGet 套件了。
Visual Studio Add NuGet Source

參考

https://www.visualstudio.com/en-us/docs/build/steps/package/nuget-publisher