如何创建同时支持.NET 5与.NET Framework 4.7.2的跨框架项目
实现同时兼容.NET 5与.NET Framework 4.7.2的跨框架项目方案
有两种成熟方案可以实现该需求,可根据你的业务场景选择:
方案一:使用.NET Standard 2.0类库(最简方案)
该方案不需要额外配置,依赖.NET Standard的API兼容能力实现跨框架支持:
- 打开Visual Studio,新建项目时选择类库(.NET Standard) 模板
- 创建完成后右键项目→属性,在「目标框架」下拉菜单选中
netstandard2.0(不要选择2.1版本,.NET Framework 4.7.2最高仅支持.NET Standard 2.0) - 编写业务代码后直接编译,生成的类库可以直接被.NET 5项目和.NET Framework 4.7.2项目引用
注意:该方案仅能使用.NET Standard 2.0覆盖的公共API,如果需要用到不同框架的独有特性,或者需要调用更高版本的API,建议选择第二种多目标框架方案。
方案二:多目标框架配置(灵活性最高,支持特性适配)
该方案可以让同一个项目同时编译出对应不同框架的产物,不受.NET Standard的API限制,还可以做框架专属的逻辑适配:
- 新建任意.NET类库项目(建议优先选.NET 5类库模板)
- 右键项目→「编辑项目文件」,打开
.csproj配置文件 - 将原来的
<TargetFramework>net5.0</TargetFramework>标签替换为<TargetFrameworks>net5.0;net472</TargetFrameworks>(注意使用复数形式TargetFrameworks,多个目标框架用分号分隔) - 保存后项目会自动重载,后续可以在代码中使用框架专属条件编译符做逻辑隔离,示例如下:
public void DemoLogic() { #if NET5_0 // 仅在.NET 5版本生效的代码 Console.WriteLine("当前运行环境为.NET 5"); #elif NET472 // 仅在.NET Framework 4.7.2版本生效的代码 Console.WriteLine("当前运行环境为.NET Framework 4.7.2"); #endif // 不同框架通用的公共逻辑 }
- 编译项目后,输出目录会分别生成
net5.0和net472两个文件夹,对应不同框架的编译产物,对应项目按需引用即可。
常见注意事项
- 若项目引用了第三方NuGet包,需要确认包同时支持你指定的两个目标框架,否则编译会报错
- 使用多目标框架方案时,所有平台专属API调用都建议用条件编译隔离,避免跨框架运行异常
内容的提问来源于stack exchange,提问作者PeterChernykh
相关产品推荐
相关产品推荐

