You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DevOps中.NET 6类库基于csproj主/次版本自动生成补丁版本

自动生成NuGet包补丁版本(沿用主/次版本)

一、修改CSPROJ文件

将固定版本号替换为版本前缀,让流水线动态生成补丁号:

<Project Sdk="Microsoft.NET.Sdk">
    <!-- 其他原有配置保持不变 -->
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>

        <PackageId>MyProject.Libraries.Azure</PackageId>
        <!-- 替换原固定<Version>为版本前缀 -->
        <VersionPrefix>6.1</VersionPrefix>
        <Authors>Me</Authors>
        <Company>MyCompany</Company>
        <Product>MyProject.Libraries.Azure</Product>
    </PropertyGroup>
    <!-- 其他原有配置保持不变 -->
</Project>

二、调整Azure DevOps流水线YAML

移除冗余的Web部署构建任务,改用DotNetCLI完成还原、构建、打包,并通过环境变量传递自动生成的完整版本号:

trigger:
- main
- feature/*
- bugfix/*

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  # 与CSPROJ中的VersionPrefix保持一致
  versionPrefix: '6.1'
  # 用Azure DevOps自动递增的BuildId作为补丁号,确保版本唯一
  fullVersion: '$(versionPrefix).$(Build.BuildId)'

steps:
- task: DotNetCoreCLI@2
  displayName: 还原NuGet依赖
  inputs:
    command: 'restore'
    projects: '$(solution)'

- task: DotNetCoreCLI@2
  displayName: 构建项目
  inputs:
    command: 'build'
    projects: '$(solution)'
    arguments: '-c $(buildConfiguration) --no-restore'

- task: DotNetCoreCLI@2
  displayName: 生成NuGet包
  inputs:
    command: 'pack'
    packagesToPack: '**/*.csproj'
    versioningScheme: 'byEnvVar'
    versionEnvVar: 'fullVersion'
    arguments: '-c $(buildConfiguration) -o $(Build.ArtifactStagingDirectory) --no-build'

可选:用Git提交次数作为补丁号

如果不想用BuildId,可添加PowerShell任务获取Git提交次数作为补丁号,替换上述变量部分:

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  versionPrefix: '6.1'

steps:
- task: PowerShell@2
  displayName: 获取Git提交次数
  inputs:
    targetType: 'inline'
    script: |
      $commitCount = git rev-list --count HEAD
      Write-Host "##vso[task.setvariable variable=fullVersion]$(versionPrefix).$commitCount"

# 后续还原、构建、打包任务保持不变

注意事项

  • 必须移除CSPROJ中的<Version>节点,否则会覆盖流水线生成的版本号
  • Build.BuildId是Azure DevOps全局变量,每次构建自动递增,保证版本唯一
  • 生成的NuGet包版本格式为6.1.x,x为自动生成的补丁号,推送后会在NuGet包管理器中显示为更新版本

内容的提问来源于stack exchange,提问作者Liam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 16:30:11