使用 .NET 5 開起來的專案,預設就能使用 C# 9 的語法,那麼 .NET 5 以前的 .NET Core 2/3、.NET Framework 4.x 專案是不是就不能用 C# 9 的語法? 非也非也,只要調整幾個小地方,.NET 5 之前的專案一樣可以使用 C# 9 的語法。
Visual Studio 2019 16.8 以上
首先,我們要確認 Visual Studio 2019 至少是 16.8 以上的版本,MSBuild 也是一樣,而 .NET Core SDK 至少要是 5.0.100 以上的版本,這些版本才有包含 C# 9 的 Compiler。
LangVersion
再來,我們要修改 *.csproj 的專案檔,增加下面的內容:
<PropertyGroup>
<LangVersion>9</LangVersion>
</PropertyGroup>
IsExternalInit
我們還可能會遇到一個錯誤訊息:
CS0518: 未定義或匯入預先定義的類型 'System.Runtime.CompilerServices.IsExternalInit'
IsExternalInit 這個類別在 .NET 5 才有定義,如果不是 .NET 5 的專案,在編譯的時候就會跳出這個錯誤,要修正這個錯誤,我們可以在專案中新增 IsExternalInit.cs
檔案,檔案的內容如下:
using System.ComponentModel;
namespace System.Runtime.CompilerServices
{
[EditorBrowsable(EditorBrowsableState.Never)]
internal static class IsExternalInit
{
}
}
這樣做了之後,我們就可以在 .NET 5 之前的專案使用 C# 9 的語法了。
參考資料
- Using C#9 record and init property in your .NET Framework 4.x, .NET Standard and .NET Core projects
- C# 9 Records and Init Only Settings Without .NET 5