如何构建同时支持.NET 5与.NET Framework的多框架兼容项目
.NET 多目标框架项目配置解决方案
现有配置错误点
- 两个PropertyGroup的Configuration判断条件完全一致,仅第一个配置会被加载,.NET Framework相关配置永远不会生效
- 手动拆分编译配置适配不同框架的思路不符合SDK风格项目的设计规范,官方已提供原生多目标支持,无需自定义netcore、netframework类配置节点
修复后的配置
直接使用SDK风格项目原生的多目标框架属性即可,无需拆分多个PropertyGroup:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <!-- 复数形式TargetFrameworks可同时指定多个目标框架,用分号分隔 --> <TargetFrameworks>net5.0;net451</TargetFrameworks> </PropertyGroup> </Project>
配套注意事项
- 存在框架专属逻辑时,可使用预处理指令做分支判断,示例:
public void GetRuntimeInfo() { #if NET451 Console.WriteLine("运行在.NET Framework 4.5.1"); #elif NET5_0 Console.WriteLine("运行在.NET 5.0"); #endif }
- 项目引用的第三方NuGet包需要同时支持两个目标框架,否则会触发编译报错
- 本地环境需要安装.NET Framework 4.5.1目标包,否则编译.NET Framework版本时会提示缺失目标框架
- 编译完成后输出目录会自动生成net5.0、net451两个子目录,分别对应两个框架的编译产物,其他项目引用时会自动匹配对应框架版本
内容的提问来源于stack exchange,提问作者Gil Sand
相关产品推荐
相关产品推荐

