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

如何让NuGet包同时支持.NET 6与.NET Framework 4.7.2

NuGet包同时支持.NET 6与.NET Framework 4.7.2的配置方案

直接修改SDK风格类库项目的配置即可,不需要新建多个项目拆分代码,步骤如下:

  • 编辑项目文件配置多目标框架
    右键你的类库项目,选择「编辑项目文件」,找到原有的单框架配置节点<TargetFramework>net6.0</TargetFramework>,将单数的TargetFramework改为复数的TargetFrameworks,用分号分隔两个目标框架的标识,其中.NET Framework 4.7.2的标识为net472,配置示例如下:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- 多目标框架列表,按需求增减框架标识即可 -->
    <TargetFrameworks>net6.0;net472</TargetFrameworks>
    <!-- 你原有的包版本、作者名、输出配置等内容全部保留,不需要修改 -->
    <Nullable>enable</Nullable>
    <PackageId>OnePlatforms.AWU</PackageId>
    <Version>对应你的包版本号</Version>
  </PropertyGroup>
</Project>
  • 处理跨框架代码兼容差异
    如果你的代码中使用了.NET 6专属API、.NET Framework 4.7.2没有对应实现的逻辑,直接用条件编译符号隔离不同框架的专属代码即可,不需要拆分独立项目:
    • 标记.NET 6专属代码块:用#if NET6_0和#endif包裹
    • 标记.NET Framework 4.7.2专属代码块:用#if NET472和#endif包裹
    • 两个框架通用的代码不需要加任何标记,会自动编译到两个目标版本中
      代码示例:
public static class RuntimeHelper
{
    public static string GetCurrentRuntimeInfo()
    {
#if NET6_0
        // .NET 6下的专属实现
        return System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;
#elif NET472
        // .NET Framework 4.7.2下的兼容实现
        return $".NET Framework {Environment.Version}";
#endif
    }
}
  • 处理框架专属依赖
    如果不同目标框架需要引用不同的NuGet依赖包,直接给包引用加目标框架判断条件即可,示例配置:
<ItemGroup>
  <!-- 所有框架通用的依赖,直接写在ItemGroup下,不需要加条件 -->
  <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
  <!-- 仅.NET 6需要引用的依赖,加Condition判断 -->
  <PackageReference Include="System.Text.Json" Version="8.0.0" Condition="'$(TargetFramework)' == 'net6.0'" />
  <!-- 仅.NET Framework 4.7.2需要引用的依赖 -->
  <PackageReference Include="System.ValueTuple" Version="4.5.0" Condition="'$(TargetFramework)' == 'net472'" />
</ItemGroup>
  • 打包验证
    配置完成后,执行dotnet pack命令或者右键项目选择「打包」,生成的NuGet包会自动包含两个目标框架的编译产物,.NET 6项目、.NET Framework 4.7.2的WinForms项目安装包时,NuGet会自动匹配对应框架的程序集,不会出现运行时不兼容的问题。

注意:如果代码中用到了.NET 6独有的语法特性(比如init-only属性、required成员、文件级命名空间等),.NET Framework 4.7.2编译时会报错,可以通过引入兼容包、条件编译隔离、调整兼容写法三种方式解决。

内容的提问来源于stack exchange,提问作者Omer Huseyin GUL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:18:55