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

从.csproj读取版本定义NuGet包版本遇空格及Trim报错问题排查

解决Azure Pipeline读取csproj版本号的空格与Trim报错问题

问题根源

你的脚本里直接取$csproj.Project.PropertyGroup.Version大概率拿到的不是单个字符串——如果你的csproj里有多个<PropertyGroup>节点(比如对应Debug/Release的不同配置组),这个操作会返回一个XmlNode集合,而非单个版本文本。这就导致两个问题:

  • 调用.Trim()时,集合对象没有这个方法,直接报错
  • 不调用Trim时,集合转字符串会引入额外空格,最终导致NuGet包路径里版本号后带空格

修复脚本

直接用XPath精准定位Version节点,确保拿到纯净的版本字符串:

- powershell: |
    [xml]$csproj = Get-Content "$(Build.SourcesDirectory)\EvolutionCommon\EvolutionCommon.csproj"
    # 用XPath直接找到所有Version节点中的第一个,取它的文本内容
    $version = $csproj.SelectSingleNode("//Version").InnerText.Trim()
    Write-Host "Version from csproj: '$version'"
    Write-Host "##vso[task.setvariable variable=csprojVersion]$version"
  displayName: 'Extract version from .csproj'
- script: |
    echo "Version used: '|$(csprojVersion)|'"
  displayName: 'Check csprojVersion value'
- script: |
    nuget.exe push "$(Build.ArtifactStagingDirectory)\EvolutionCommon.$(csprojVersion).nupkg"

备选方案(针对多PropertyGroup场景)

如果明确知道要取哪个PropertyGroup的版本,也可以指定索引:

- powershell: |
    [xml]$csproj = Get-Content "$(Build.SourcesDirectory)\EvolutionCommon\EvolutionCommon.csproj"
    # 取第一个PropertyGroup里的Version
    $version = $csproj.Project.PropertyGroup[0].Version.InnerText.Trim()
    Write-Host "Version from csproj: '$version'"
    Write-Host "##vso[task.setvariable variable=csprojVersion]$version"
  displayName: 'Extract version from .csproj'

验证方式

通过中间的Check csprojVersion value任务,看输出的Version used: '|1.0.2|'里,版本号前后有没有多余空格,确认修复效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:04:57