在 Visual Studio 2022 中使用滑鼠右鍵點擊專案 > 屬性,在屬性頁面中找到 建置 > 進階 > 語言版本,在 .NET 6 中預設是使用 C# 10.0
預設框架版本和 C# 語言版本對應如下:
在新版的 Visual Studio 中已經無法使用介面變更 C# 版本, C# 編譯器會依據目標框架版本自動推斷 C# 語言版本。不過我們還是可以透過修改 .csproj 來修改:
不過其實這是不合法的,編譯時會出現錯誤:
在後續的版本中, .NET 5 或以上才支援 C# 9, .NET 6 或以上才支援 C# 10, .NET 7 或以上才支援 C# 11,簡單來說就是可以降版,但是升版就沒有辦法。
其實筆者最想要的就只是 C# 11 的原始字串常值功能,面多有引號的部分可以很方便解決,在寫測試的時候非常方便:
不過還有方式可以解決這個問題,只要先安裝新版的 .NET SDK ,就可以使用最新的語法
參考資料:
Microsoft.Learn - C# language versioning
Microsoft.Learn - What's new in C# 11
Microsoft.Learn - Strings and string literals
預設框架版本和 C# 語言版本對應如下:
目標 | 版本 | C# 語言版本預設值 |
---|---|---|
.NET | 7.x | C# 11 |
.NET | 6.x | C# 10 |
.NET | 5.x | C# 9.0 |
.NET Core | 3.x | C# 8.0 |
.NET Core | 2.x | C# 7.3 |
.NET Standard | 2.1 | C# 8.0 |
.NET Standard | 2.0 | C# 7.3 |
.NET Standard | 1.x | C# 7.3 |
.NET Framework | all | C# 7.3 |
在新版的 Visual Studio 中已經無法使用介面變更 C# 版本, C# 編譯器會依據目標框架版本自動推斷 C# 語言版本。不過我們還是可以透過修改 .csproj 來修改:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>11.0</LangVersion>
</PropertyGroup>
</Project>
不過其實這是不合法的,編譯時會出現錯誤:
0>CSC: Error CS1617 : /langversion 的選項 '11.0' 無效。請使用 '/langversion:?' 來列出支援的值。
0>------- Finished building project: WinFormsApp1. Succeeded: False. Errors: 1. Warnings: 0
在後續的版本中, .NET 5 或以上才支援 C# 9, .NET 6 或以上才支援 C# 10, .NET 7 或以上才支援 C# 11,簡單來說就是可以降版,但是升版就沒有辦法。
其實筆者最想要的就只是 C# 11 的原始字串常值功能,面多有引號的部分可以很方便解決,在寫測試的時候非常方便:
string longMessage = """
This is a long message.
It has several lines.
Some are indented
more than others.
Some should start at the first column.
Some have "quoted text" in them.
""";
不過還有方式可以解決這個問題,只要先安裝新版的 .NET SDK ,就可以使用最新的語法
- preview: 編譯器會接受最新預覽版本的所有有效語言語法
- latest: 編譯器會接受編譯器最新已發行版本 (包括次要版本) 的語法
- latestMajor 或 default: 編譯器會接受編譯器最新已發行主要版本的語法
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
參考資料:
Microsoft.Learn - C# language versioning
Microsoft.Learn - What's new in C# 11
Microsoft.Learn - Strings and string literals
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com