LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

如何在.NET Framework及.NET6以前項(xiàng)目中使用C#12新特性

freeflydom
2024年7月22日 10:4 本文熱度 1109

前兩天發(fā)了一篇關(guān)于模式匹配的文章,鏈接地址,有小伙伴提到使用.NET6沒(méi)法體驗(yàn) C#新特性的疑問(wèn), 其實(shí)呢只要本地的SDK源代碼編譯器能支持到的情況下(直接下載VS2022或者VS的最新preview版本)
只需要做很小的改動(dòng)就可以支持的.

目前仍然還有一些小伙伴因?yàn)闅v史原因可能還在寫(xiě).NET Framework項(xiàng)目,

.NET Framework 目前不直接支持 C# 12,因?yàn)?C# 12 是與 .NET 6 和更高版本一起發(fā)布的,而 .NET Framework 的最后一個(gè)版本是 4.8,之后就不再更新了。但是,你也可以通過(guò)一些方法間接使用 C# 12 的新特性,前提是這些特性在編譯時(shí)不依賴于 .NET 6 或更高版本的基礎(chǔ)類庫(kù)的新特性。以下是實(shí)現(xiàn)這一目標(biāo)的步驟:

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

  2. 編輯項(xiàng)目文件:手動(dòng)編輯你的 .csproj 文件,將 C# 語(yǔ)言版本設(shè)置為 12。這可以通過(guò)添加或修改 <LangVersion> 標(biāo)簽來(lái)實(shí)現(xiàn)。

<PropertyGroup>

  <LangVersion>12.0</LangVersion>

</PropertyGroup>

當(dāng)然如果安裝的VS2022的最新preview版本你還可以把版本號(hào)直接設(shè)置為latest以支持比12.0更高的語(yǔ)言版本

當(dāng)然如果你的代碼可能需要同時(shí)支持多個(gè)框架版本你可以使用預(yù)編譯指令,以避免編譯錯(cuò)誤的問(wèn)題

#if NET8_0_OR_GREATER

// 使用 C# 12 的特性,這些特性依賴于 .NET8 或更高版本的基礎(chǔ)類庫(kù)

#else

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

#endif

當(dāng)設(shè)置LangVersion后,對(duì)于NET Framework項(xiàng)目如果使用record,init等關(guān)鍵字定義時(shí)應(yīng)該還會(huì)有如下的報(bào)錯(cuò)出現(xiàn),這主要是因?yàn)榧嫒?code style="margin: 0px 3px; padding: 0px 5px; font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace, sans-serif; line-height: 1.8; display: inline-block; overflow-x: auto; vertical-align: middle; border-radius: 3px; background-color: rgb(251, 229, 225); color: rgb(192, 52, 29); border: none !important;">.NET Standard版本實(shí)現(xiàn)的問(wèn)題:

解決這個(gè)問(wèn)題也很簡(jiǎn)單,項(xiàng)目中定義一個(gè)命名空間為System.Runtime.CompilerServicesIsExternalInitclass即可:

namespace System.Runtime.CompilerServices

{

    public static class IsExternalInit

    {

    }

}

下面創(chuàng)建一個(gè)項(xiàng)目測(cè)試一下,代碼如下:

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.");

            }

        }

    }

}

以上的代碼項(xiàng)目框架是.NET Framework4.5.2,用到了最新的一些C#特性,經(jīng)過(guò)簡(jiǎn)單改造,就可以編譯成功了.

重中之重就是本地SDK的csc編譯器支持的最大版本一定要>=LangVersion設(shè)置版本

最后請(qǐng)注意,即使通過(guò)這些方法,也不意味著早期的框架版本項(xiàng)目就能使用Nuget引用新版框架的dll庫(kù),比如NETFramework4.5引用NET8編譯的dll版本,那肯定是不行的,除非該dll編譯成了對(duì)應(yīng)的框架版本支持

轉(zhuǎn)自https://www.cnblogs.com/vipwan/p/18313947 作者萬(wàn)雅虎


該文章在 2024/7/22 10:04:57 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
中文字幕三级免费片 | 在线精品国产尤物 | 亚洲限制级资源在线观看 | 色欧美4477福利网在线观看 | 亚洲一级精品在线观看 | 日本无遮真人祼交视频 |