软件包版本始终为1.0.0,带有dotnet包

Ale*_*iak 42 .net msbuild tfs visual-studio .net-core

TLDR:在为dotnet pack程序集创建nuget包时,在哪里提取版本信息?

我有一个库,我已经从.NET 4.6.1项目转换为.NET Core项目project.json.对于我在此期间的CI(使用TFS 2015 vnext),我会得到我的版本号,并用新版本替换project.json文件中的版本号.该dotnet pack命令可以很好地选择版本,并创建一个包含更新版本号的新包.

上周,我从2015年TFS升级到2017年TFS.原来,project.json被更新的.csproj文件取代.我已经更新了我的CI.在我的CI期间 - 我更新了我的/Properties/AssemblyInfo.cs文件,将AssemblyVersion标签替换为当前版本的版本.然后我构建了解决方案 - 构建得很好.然后我打包解决方案.

不过,尽管AssemblyVersionAssemblyFileVersion在被设置AssemblyInfo.cs为正确的版本号- dotnet pack仍在生产.nu​​pkg那些文件*.1.0.0.nupkg.

我错过了什么?

这是我的包命令:

dotnet pack $projectFile -o $currentDirectory
Run Code Online (Sandbox Code Playgroud)

Edw*_*ard 63

更好的是,/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
Run Code Online (Sandbox Code Playgroud)

示例(特定于TFS)< - 我们使用PowerShell脚本步骤将其用于我们的TFS 2017打包.

dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber)
Run Code Online (Sandbox Code Playgroud)

注意:它不会更新包参考版本.

  • 对于任何苦苦挣扎的人 - 确保你的`*.csproj`文件中没有任何`<Version>`或`<VersionPrefix>`值.否则,这些将覆盖您在命令行中指定的任何内容. (10认同)
  • 当指定 .nuspec 文件时,这似乎不起作用。以前的“nuget.exe pack -Version”可以,但不能使用带有“-p:NuspecFile=”参数的“dotnet pack”。尝试了“-p:Version”和“-p:PackageVersion”。它坚持 .nuspec 文件中的版本(这是必需的),并且我无法使用来自构建服务器的 git 任务的版本覆盖它。 (3认同)

Nat*_*ini 27

当您使用时dotnet pack,版本将从项目定义(以前project.json,现在*.csproj)中提取,而不是AssemblyInfo.cs.因此,您的新工作流程将非常类似于它的工作流程project.json.

project.json到csproj迁移文档,您可以使用VersionPrefixVersionSuffix属性.

之前:

{
  "version": "1.0.0-alpha-*"
}
Run Code Online (Sandbox Code Playgroud)

现在:

<PropertyGroup>
  <VersionPrefix>1.0.0</VersionPrefix>
  <VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

您也可以使用单一Version属性,但文档警告此"可能会在打包期间覆盖版本设置".

<PropertyGroup>
  <Version>1.0.0-alpha</Version>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

  • 要添加到此,您可以在命令行中通过向dotnet pack命令添加类似"/p:Version=1.0.0-alpha"的内容来提供VersionPrefix和VersionSuffix(或仅单个Version属性). (7认同)
  • 我最终使用 powershell 重写 .csproj 作为构建的一部分来替换版本前缀和版本后缀。 (2认同)

Sud*_*hra 17

注意:我知道这个问题不是专门针对 VSTS/Azure Dev Ops,而是在此处搜索如何在构建管道上执行此操作,因此添加对我有用的内容

  1. 使用 dotnet 核心任务
  2. 工具版本 2.*
  3. 命令 = 自定义
  4. 自定义命令 = 包
  5. 参数 = -p:Version=1.0.$(Build.BuildId) -o $(Build.ArtifactStagingDirectory)

如果打包后的任务将推送到提要,则需要 -o 参数(这不是人们构建包的原因吗?)