天道酬勤

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>

修改完毕后,就可以看到依赖项如下图

bf353e611782a2e87c24ec32c7447c3c

 

修改代码

修改完毕,直接编译会提示错误信息:

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。

 

posted @ 2025-12-04 11:39  JulyLuo  阅读(6)  评论(0)    收藏  举报