Azure Devops yaml dotnet core build /p:Version=1.2.3 始终默认为 csproj 中的版本

jto*_*ain 4 versioning .net-core azure-devops

我正在尝试通过 Azure DevOps 构建一个 dotnet 核心应用程序。我希望我的程序集使用内部版本号进行版本控制。

在 .csproj 文件中:

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
  <Version>0.0.1</Version>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

yaml 构建管道包含:

trigger:
  branches:
   include:
     - master

pool:
  name: 'Hosted Windows 2019 with VS2019'
  #vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'
  Version.Revision: $[counter(format('{0:yyyyMMdd}', pipeline.startTime), 0)]
  VersionMajor: 0
  VersionMinor: 1


name: '$(VersionMajor).$(VersionMinor).$(Date:yy)$(DayOfYear).$(Version.Revision)'

steps:
- task: DotNetCoreInstaller@0
  inputs:
    version: '2.2.300'

- script: dotnet build --configuration Release /p:Version=$(Build.BuildNumber)
  displayName: 'dotnet build $(buildConfiguration) $(Build.BuildNumber)'
Run Code Online (Sandbox Code Playgroud)

在 Azure Devops 构建日志中,该命令似乎选择了正确的版本:

dotnet build --configuration Release /p:Version=0.1.19185.10
Run Code Online (Sandbox Code Playgroud)

但是当我下载工件并验证 dll 时,它们仍然包含版本号 0.0.1

在本地执行此命令会在 dll 中添加版本号。那么,为什么不通过 Azure DevOps 添加该版本?

Gra*_*ith 5

除非你告诉它否则dotnet publish会导致在发布文件之前重新编译,从而覆盖你之前尝试用dotnet build. 您使用该--no-build标志来抑制编译。请注意,这--no-build也会设置,--no-restore因此您需要dotnet restore显式调用。一组典型的命令(带有你可能会在 Azure DevOps 中看到的典型变量)可能是:

dotnet restore
dotnet build --configuration $(BuildConfiguration) --no-restore /p:Version=$(Build.BuildNumber)
dotnet publish --configuration $(BuildConfiguration) --no-build --output $(Build.ArtifactStagingdirectory)
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅博客文章。

  • 我不知道为什么微软让这些任务如此混乱。非常感谢您通过博文提供的意见和背景信息!我使用您的代码片段进行的第一次测试证实了您的答案(事实上您也花了很长时间来弄清楚这一点)。 (2认同)
  • 同意——他们对此可以更清楚。很高兴我能提供帮助! (2认同)