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

如何在Directory.Packages.props中按.NET与.NET Framework框架配置不同的NuGet包版本?

如何在Directory.Packages.props中按.NET与.NET Framework框架配置不同的NuGet包版本?

好问题!我之前也碰到过一模一样的需求——不想每个项目都写VersionOverride,而是在Directory.Packages.props里集中管控不同框架的NuGet版本。其实借助MSBuild的条件判断和属性机制就能轻松实现,下面给你两种实用方案,附上示例和说明:

方案一:用条件属性组集中管理(推荐,适合多包场景)

这种方式先给不同框架定义统一的版本属性,再在PackageReference里引用,后续修改版本只需要改属性值,非常方便。

<Project>
  <!-- 为.NET Framework 4.8单独指定包版本 -->
  <PropertyGroup Condition="'$(TargetFramework)' == 'net48'">
    <NewtonsoftJsonVersion>13.0.1</NewtonsoftJsonVersion>
    <AutoMapperVersion>10.1.1</AutoMapperVersion>
  </PropertyGroup>

  <!-- 为.NET 6/7/8指定另一套版本 -->
  <PropertyGroup Condition="'$(TargetFramework)' == 'net6.0' Or '$(TargetFramework)' == 'net7.0' Or '$(TargetFramework)' == 'net8.0'">
    <NewtonsoftJsonVersion>13.0.3</NewtonsoftJsonVersion>
    <AutoMapperVersion>12.0.1</AutoMapperVersion>
  </PropertyGroup>

  <!-- 兜底的默认版本(可选,防止有未匹配的框架) -->
  <PropertyGroup>
    <NewtonsoftJsonVersion Condition="'$(NewtonsoftJsonVersion)' == ''">13.0.2</NewtonsoftJsonVersion>
    <AutoMapperVersion Condition="'$(AutoMapperVersion)' == ''">11.0.1</AutoMapperVersion>
  </PropertyGroup>

  <!-- 集中声明所有需要管控的包,引用上面的版本属性 -->
  <ItemGroup>
    <PackageReference Update="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
    <PackageReference Update="AutoMapper" Version="$(AutoMapperVersion)" />
  </ItemGroup>
</Project>

关键说明:

  • 每个<PropertyGroup>通过Condition匹配对应的TargetFramework,定义专属的版本属性(比如NewtonsoftJsonVersion)
  • 兜底的属性组确保如果项目用了未在条件里定义的框架,会自动使用默认版本
  • 所有项目共享这套配置,不用再逐个项目写版本覆盖

方案二:直接在PackageReference上加条件(适合单包简单场景)

如果只是少数几个包需要区分框架,也可以直接给每个PackageReference加Condition,写法更直接:

<Project>
  <ItemGroup>
    <!-- .NET Framework 4.8 用旧版本 -->
    <PackageReference Update="Newtonsoft.Json" Version="13.0.1" Condition="'$(TargetFramework)' == 'net48'" />
    <!-- 其他所有框架用新版本 -->
    <PackageReference Update="Newtonsoft.Json" Version="13.0.3" Condition="'$(TargetFramework)' != 'net48'" />
  </ItemGroup>
</Project>

注意事项:

  • 确保你的项目已经启用了中央包版本管理:项目文件里要包含<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>,否则Directory.Packages.props的配置不会生效
  • TargetFramework的取值要和项目里的完全一致,比如net48、net6.0-windows10.0.19041这类带后缀的框架,要精准匹配
  • 多目标框架的项目也能正常工作,MSBuild会为每个目标框架自动选择对应的版本

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:32:58