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

多目标框架.NET项目条件NuGet包引用升级方案咨询

多目标框架项目NuGet包版本升级规范方案

VS 内置的 NuGet 包管理器 GUI 目前暂不直接支持按目标框架差异化升级条件引用的包,可采用以下几种官方推荐的规范方案处理:

  • 方案1:MSBuild 属性统一管理版本号
    将不同目标框架对应的依赖版本统一定义在项目文件顶部的 PropertyGroup 节点中,后续升级仅需修改对应版本属性即可,无需逐个修改每个包引用的版本号。
    改造后的项目配置示例:

    <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net6.0</TargetFrameworks>
        <!-- 统一定义各目标框架下的依赖版本 -->
        <EfCoreVersionNetStandard20>3.1.31</EfCoreVersionNetStandard20>
        <EfCoreVersionNet60>6.0.25</EfCoreVersionNet60>
        <CommonExtensionsVersionNetStandard20>3.1.31</CommonExtensionsVersionNetStandard20>
        <CommonExtensionsVersionNet60>6.0.25</CommonExtensionsVersionNet60>
    </PropertyGroup>
    
    <ItemGroup>
        <PackageReference Include="morelinq" Version="3.3.2" />
        <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>
    
    <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EfCoreVersionNetStandard20)" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EfCoreVersionNetStandard20)" />
        <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(CommonExtensionsVersionNetStandard20)" />
        <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="$(CommonExtensionsVersionNetStandard20)" />
    </ItemGroup>
    
    <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EfCoreVersionNet60)" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EfCoreVersionNet60)" />
        <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(CommonExtensionsVersionNet60)" />
        <PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="$(CommonExtensionsVersionNet60)" />
    </ItemGroup>
    
  • 方案2:使用.NET 原生中央包管理(CPM)
    这是微软官方推荐的全解决方案包版本管理方案,适合有多个多目标框架项目的场景:

    1. 在解决方案根目录新建 Directory.Packages.props 文件,统一配置所有包的版本,支持按目标框架设置条件版本
    2. 项目文件中的 PackageReference 无需再写 Version 属性,版本自动从中央配置继承
      中央配置示例:
    <Project>
      <PropertyGroup>
        <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
      </PropertyGroup>
    
      <ItemGroup>
        <!-- 全局通用包版本 -->
        <PackageVersion Include="morelinq" Version="3.3.2" />
        <PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
      </ItemGroup>
    
      <!-- netstandard2.0 专属包版本 -->
      <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
        <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.31" />
        <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.31" />
        <PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.1.31" />
        <PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="3.1.31" />
      </ItemGroup>
    
      <!-- net6.0 专属包版本 -->
      <ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
        <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.25" />
        <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.25" />
        <PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="6.0.25" />
        <PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="6.0.25" />
      </ItemGroup>
    </Project>
    
  • 方案3:使用 dotnet CLI 精准指定目标框架升级
    需要单独升级某个目标框架下的包时,可直接使用 dotnet 命令行工具,通过 --framework 参数指定对应目标框架,不会影响其他框架的包版本,示例命令:

    # 升级 netstandard2.0 目标下的 EF Core 到最新的3.1.x版本
    dotnet add package Microsoft.EntityFrameworkCore --version 3.1.31 --framework netstandard2.0
    # 升级 net6.0 目标下的 EF Core 到最新的6.0.x版本
    dotnet add package Microsoft.EntityFrameworkCore --version 6.0.25 --framework net6.0
    
  • 临时方案:切换VS目标框架上下文操作
    在VS顶部的工具栏目标框架下拉框中,先选中你要升级包对应的目标框架,再打开「管理NuGet包」功能,此时升级操作只会作用于当前选中的目标框架,该方案偶发缓存异常,仅适合临时快速修改使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:39:00