LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

如何在.NET Framework及.NET6以前项目中使用C#12新特性

freeflydom
2024年7月22日 10:4 本文热度 425

前两天发了一篇关于模式匹配的文章,链接地址,有小伙伴提到使用.NET6没法体验 C#新特性的疑问, 其实呢只要本地的SDK源代码编译器能支持到的情况下(直接下载VS2022或者VS的最新preview版本)
只需要做很小的改动就可以支持的.

目前仍然还有一些小伙伴因为历史原因可能还在写.NET Framework项目,

.NET Framework 目前不直接支持 C# 12,因为 C# 12 是与 .NET 6 和更高版本一起发布的,而 .NET Framework 的最后一个版本是 4.8,之后就不再更新了。但是,你也可以通过一些方法间接使用 C# 12 的新特性,前提是这些特性在编译时不依赖于 .NET 6 或更高版本的基础类库的新特性。以下是实现这一目标的步骤:

  1. 更新 Visual Studio:确保你的 Visual Studio 至少更新到支持 C# 12 的版本。这通常意味着使用 Visual Studio 2022 的最新版本。

  2. 编辑项目文件:手动编辑你的 .csproj 文件,将 C# 语言版本设置为 12。这可以通过添加或修改 <LangVersion> 标签来实现。

<PropertyGroup>

  <LangVersion>12.0</LangVersion>

</PropertyGroup>

当然如果安装的VS2022的最新preview版本你还可以把版本号直接设置为latest以支持比12.0更高的语言版本

当然如果你的代码可能需要同时支持多个框架版本你可以使用预编译指令,以避免编译错误的问题

#if NET8_0_OR_GREATER

// 使用 C# 12 的特性,这些特性依赖于 .NET8 或更高版本的基础类库

#else

// 提供 .NET Framework 兼容的代码

#endif

当设置LangVersion后,对于NET Framework项目如果使用record,init等关键字定义时应该还会有如下的报错出现,这主要是因为兼容.NET Standard版本实现的问题:

解决这个问题也很简单,项目中定义一个命名空间为System.Runtime.CompilerServicesIsExternalInitclass即可:

namespace System.Runtime.CompilerServices

{

    public static class IsExternalInit

    {

    }

}

下面创建一个项目测试一下,代码如下:

namespace UseLatestLangVersion

{

    public class TestClass(string initWord)

    {

        public int Id { get; init; }

        public record User(string Name, int Age);

        public void SayHello()

        {

            Console.WriteLine(initWord);

            var user = new User("vipwan", 30);

            if (user is { Age: >= 18 })

            {

                Console.WriteLine($"user {user.Name} is adult.");

            }

        }

    }

}

以上的代码项目框架是.NET Framework4.5.2,用到了最新的一些C#特性,经过简单改造,就可以编译成功了.

重中之重就是本地SDK的csc编译器支持的最大版本一定要>=LangVersion设置版本

最后请注意,即使通过这些方法,也不意味着早期的框架版本项目就能使用Nuget引用新版框架的dll库,比如NETFramework4.5引用NET8编译的dll版本,那肯定是不行的,除非该dll编译成了对应的框架版本支持

转自https://www.cnblogs.com/vipwan/p/18313947 作者万雅虎


该文章在 2024/7/22 10:04:57 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved