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

如何让Azure DevOps Pipeline打包时识别.csproj中的PackageVersion属性

解决Azure DevOps Pipeline读取.csproj中PackageVersion的问题

核心原因

Azure DevOps Pipeline中如果在dotnet pack或构建任务里强制指定了版本参数(比如-p:Version、-p:PackageVersion),会覆盖.csproj文件中<PackageVersion>的定义,导致所有包版本统一。而本地执行时没有加这些参数,所以会自动读取项目文件里的版本。

具体解决步骤

1. 修改DotNetCoreCLI打包任务

在你的Pipeline YAML文件中,找到DotNetCoreCLI的pack任务,移除所有手动指定版本的参数:

  • 删除类似arguments: '--configuration $(BuildConfiguration) -p:PackageVersion=$(Build.BuildNumber)'的带版本参数的配置
  • 保留基础打包逻辑即可,示例YAML:
- task: DotNetCoreCLI@2
  displayName: 'Dotnet Pack'
  inputs:
    command: 'pack'
    packagesToPack: '**/*.csproj' # 匹配所有类库项目
    configuration: '$(BuildConfiguration)'
    packDirectory: '$(Build.ArtifactStagingDirectory)'
    # 不要添加任何-p:Version或-p:PackageVersion参数

2. 确认.csproj配置有效性

每个类库项目的.csproj中需正确设置<PackageVersion>,示例:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <PackageVersion>1.0.1</PackageVersion> <!-- 此版本会被打包命令自动读取 -->
    <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
  </PropertyGroup>
</Project>

若设置了<GeneratePackageOnBuild>true</GeneratePackageOnBuild>,构建阶段会自动打包,此时需确保构建任务同样没有指定版本参数。

3. 清理全局版本变量

检查Pipeline中是否定义了Version或PackageVersion这类全局变量,若有则删除,避免它们被自动注入到构建/打包命令中。

4. 验证打包结果

运行Pipeline后,在生成的Artifact中查看NuGet包版本,确认其与对应.csproj里的<PackageVersion>一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:12:18