使用 VSTS 进行 NuGet 自动版本控制

标签 nuget .net-core azure-devops

我们正在寻找如何在 Visual Studio Team Services 上将 GitHubFlow 与 NuGet 包和自动 NuGet 包创建一起使用的最佳实践。

我们已经使用了 VSTS“dotnet pack”命令
enter image description here

但是如何自动定义 Major.Minor.Release 呢?
我们不想在 *.csproj 或存储库中使用这些变量,因为这不适用于 Pull Requests。

目前的最佳实践是什么?

最佳答案

您可以在 Azure DevOps(以前称为 VSTS)中的单个管道中完成所有这些操作。如果您使用的是 git 存储库,我强烈建议使用 GitVersion 来自动确定下一个版本号。您可以在此处将其添加为构建任务:https://marketplace.visualstudio.com/items?itemName=gittools.gitversion

在您的存储库中,我建议您将 GitVersion 配置为在该存储库的“主线”模式下运行,这样每次提交时,您的版本都会自动递增 +1,例如1.0.1、1.0.2、1.0.3。不过,您始终可以将提交标记为特定修订。要设置 Mainline 模式,只需在存储库“GitVersion.yml”的根目录中放置一个文件,内容为“mode: Mainline”。这只适用于 GitVersion v4.0+

返回 Azure DevOps 管道,在解决方案构建之后、nuget pack 命令之前运行 GitVersion 任务。一旦 GitVersion 任务运行,您将可以访问它创建的变量,您可以在 nuget 包选项中使用这些变量。

在 Nuget“Pack Options”下,将 Automatic package versioning 设置为“Use an environment variable”,然后使用变量“GitVersion_NuGetVersion”

GitVersion 开箱即用非常好,特别是对于 GitFlow 和 GitHub Flow,但您可能需要阅读文档。 http://gitversion.readthedocs.io/en/latest/

您将在下面找到一个执行整个管道过程的示例 YAML 文件。除了从 GitVersion 获取版本号以及配置要推送到的 nuget 服务器之外,大多数都是开箱即用的。

pool:
  name: Default
  demands:
  - msbuild
  - visualstudio
  - vstest

steps:
- task: gittools.gitversion.gitversion-task.GitVersion@4
  displayName: GitVersion
  inputs:
    updateAssemblyInfo: true

- task: NuGetToolInstaller@0
  displayName: 'Use NuGet 4.3.0'

- task: NuGetCommand@2
  displayName: 'NuGet restore'
  inputs:
    restoreSolution: '$(Parameters.solution)'

- task: VSBuild@1
  displayName: 'Build solution **\*.sln'
  inputs:
    solution: '$(Parameters.solution)'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

- task: VSTest@2
  displayName: 'VsTest - testAssemblies'
  inputs:
    testAssemblyVer2: |
     **\$(BuildConfiguration)\*test*.dll
     !**\obj\**
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    versioningScheme: byEnvVar
    versionEnvVar: 'GitVersion_NuGetVersion'

- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
    nuGetFeedType: external
    publishFeedCredentials: 'Your NuGet Server'

关于使用 VSTS 进行 NuGet 自动版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47751666/

相关文章:

c# - NET Framework 4.7.2 应用程序能否在运行时加载 NET Core 5.0 库 DLL?

c# - 无法使用 .NET Core 2.0 加载文件或程序集

azure - 使用 azure 构建管道、自托管代理和 docker-desktop 创建 docker 镜像

powershell - 创建NuGet PowerShell脚本时,如何分辨新安装和升级之间的区别?

azure - 在 Microsoft Virtual Assistant 和 Skills 之间传递数据

azure-devops - 未找到执行应用程序所需的库 'hostpolicy.dll'

azure - 如何从 Github 上完全删除 Azure-Pipelines

deployment - NuGet 不复制配置文件

xamarin - 构建时更新 Xamarin Forms 会产生 "invalid android support library configuration"错误。

nuget - 如何使用命令行清除 NuGet 包缓存?