net 项目支持多版本(netcore和netframework)
前言
目前遇到一个项目需要同时只是.NET8和.netframework ,这里记录下如何修改
正文
修改配置信息
目前的工程文件是.NET8 版本的,配置文件如下
<PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> <Version>8.6.6</Version> </PropertyGroup>
这里把 <TargetFramework>net8.0</TargetFramework>
修改如下即可:
<TargetFrameworks>net8.0;net472</TargetFrameworks>
修改完毕后,就可以看到依赖项如下图

修改代码
修改完毕,直接编译会提示错误信息:
CS8630 无效的 nullable 值: C# 7.3 的“Enable”。请使用语言版本 8.0 或更高版本。
因为.NET Framework 4.7.2 不支持可为空的类型(C# 8.0 特性)
需要把可为空的修改如下:
public int? limit { get; set; } //以上为可为空类型 public int limit { get; set; }
使用条件编译符合
对于多目标框架(net8.0;net472)的项目,还需要为不同框架配置不同的可空引用类型设置
最终的配置信息
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFrameworks>net8.0;net472</TargetFrameworks> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <!-- 默认启用 --> </PropertyGroup> <!-- 为.NET Framework 4.7.2禁用可空引用类型 --> <PropertyGroup Condition="'$(TargetFramework)' == 'net472'"> <Nullable>disable</Nullable> <LangVersion>7.3</LangVersion> <!-- 明确指定C# 7.3 --> </PropertyGroup> <!-- 为.NET 8.0启用可空引用类型 --> <PropertyGroup Condition="'$(TargetFramework)' == 'net8.0'"> <Nullable>enable</Nullable> <LangVersion>latest</LangVersion> </PropertyGroup> </Project>
结尾
这样设置下来,就能支持netcore 和netframework。

浙公网安备 33010602011771号