Dot-Net

軟體包版本始終為 1.0.0,帶有 dotnet pack

  • March 14, 2017

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標籤替換為目前建構的版本。然後我建構解決方案 - 建構得很好。然後我打包解決方案。

但是,儘管AssemblyVersionAssemblyFileVersion設置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 遷移文件,您可以使用VersionPrefixVersionSuffix屬性。

前:

{
 "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)

注意:它不會更新包參考版本。

引用自:https://stackoverflow.com/questions/42797993