軟體包版本始終為 1.0.0,帶有 dotnet pack
dotnet packTLDR:為程序集創建 nuget 包時, 在哪裡提取版本資訊?我有一個庫,我已經從 .NET 4.6.1 項目過渡到了 .NET Core 項目
project.json。對於我在此期間的 CI(使用 TFS 2015 vnext),我將獲取我的版本號並將 project.json 文件中的版本號替換為新版本。該dotnet pack命令會很好地選擇版本,並使用更新的版本號創建一個新包。上週,我從 TFS 2015 升級到 TFS 2017。結果,project.json 被更新的 .csproj 文件替換。我已經更新了我的 CI。在我的 CI 期間 - 我更新了我的
/Properties/AssemblyInfo.cs文件,將AssemblyVersion標籤替換為目前建構的版本。然後我建構解決方案 - 建構得很好。然後我打包解決方案。但是,儘管
AssemblyVersion和AssemblyFileVersion設置AssemblyInfo.cs為正確的內部版本號 -dotnet pack仍然會生成 .nupkg 文件,即*.1.0.0.nupkg.我錯過了什麼?
這是我的打包命令:
dotnet pack $projectFile -o $currentDirectory
當您使用
dotnet pack時,版本是從項目定義中提取的(以前project.json,現在*.csproj),而不是AssemblyInfo.cs. 因此,您的新工作流程將與project.json.從project.json 到 csproj 遷移文件,您可以使用
VersionPrefix和VersionSuffix屬性。前:
{ "version": "1.0.0-alpha-*" }現在:
<PropertyGroup> <VersionPrefix>1.0.0</VersionPrefix> <VersionSuffix>alpha</VersionSuffix> </PropertyGroup>您也可以使用單個
Version屬性,但文件警告說這“可能會在打包過程中覆蓋版本設置”。<PropertyGroup> <Version>1.0.0-alpha</Version> </PropertyGroup>
更好的是,
/p:Version=$(Build.BuildNumber)在 dotnet pack 命令上指定 (TFS/VSTS),它將使用 nuget 包中的指定版本建構它。範例(非 TFS 特定):dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3範例(特定於 TFS)<- 我們將其用於使用 powershell 腳本步驟進行的 TFS 2017 打包。
dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber)注意:它不會更新包參考版本。