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

多目标.NET NuGet包版本异常:仅.NET 4.5 DLL从Azure DevOps流水线获取正确版本,.NET Standard 2.0保持默认值

多目标.NET NuGet包版本异常:仅.NET 4.5 DLL从Azure DevOps流水线获取正确版本,.NET Standard 2.0保持默认值

嘿,我之前在做多目标.NET库的NuGet打包时也踩过这个版本不同步的坑,咱们一步步来排查解决:

1. 先检查你的项目文件(.csproj)配置

这是最常见的问题根源:

  • 确保你的根PropertyGroup里统一设置了版本变量,不要给不同目标框架单独硬编码版本。比如:
    <PropertyGroup>
      <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
      <!-- 同时设置Version和PackageVersion,覆盖所有目标框架 -->
      <Version>$(PackageVersion)</Version>
      <PackageVersion>$(PackageVersion)</PackageVersion>
    </PropertyGroup>
    
  • 如果你之前给net45单独加了带条件的PropertyGroup来设置版本,一定要删掉!比如下面这种会导致netstandard2.0用默认版本:
    <!-- 这种要删掉! -->
    <PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
      <Version>$(PackageVersion)</Version>
    </PropertyGroup>
    

2. 调整Azure DevOps流水线的打包任务

分开的restore和build有时候会导致版本变量没有正确传递到所有目标框架的编译过程,推荐直接用pack命令一步到位,它会自动处理restore和build:

- task: DotNetCoreCLI@2
  displayName: 'dotnet pack with dynamic version'
  inputs:
    command: 'pack'
    projects: '$(csprojFilePath)'
    # 指定用环境变量来控制版本
    versioningScheme: 'byEnvVar'
    versionEnvVar: 'PackageVersion'
    arguments: '--configuration Release'

这样PackageVersion会直接注入到整个打包流程,两个目标框架的DLL版本都会同步。

3. 验证流水线变量的有效性

有时候变量作用域或者赋值时机不对也会出问题,可以在打包任务前加个打印任务确认变量值:

- task: PowerShell@2
  displayName: 'Check PackageVersion value'
  inputs:
    targetType: 'inline'
    script: 'Write-Host "当前使用的PackageVersion是:$(PackageVersion)"'

如果打印出来的值不对,那得先检查变量的设置位置和作用域,确保它在打包任务之前已经正确赋值。

4. 清理缓存再试

Azure DevOps的缓存有时候会残留旧的版本信息,你可以在流水线里加个清理任务:

- task: DotNetCoreCLI@2
  displayName: 'dotnet clean'
  inputs:
    command: 'clean'
    projects: '$(csprojFilePath)'
    arguments: '--configuration Release'

先清理再打包,避免缓存干扰。

一般按照上面的步骤调整后,两个目标框架的版本就能同步啦!

备注:内容来源于stack exchange,提问作者Luandersonn Airton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:04:52