C# 語言版本控制
最新 C# 編譯器會根據您專案的目標 Framework 判斷預設語言版本。 Visual Studio 不提供 UI 來變更值,但您可以編輯 csproj 檔案來變更此值。 預設選項可確保您使用與目標架構相容的最新語言版本。 您可以從存取與專案目標相容的最新語言功能獲益。 此預設選項也可確保您不會使用需要目標架構中無法使用類型或執行時間行為的語言。 選擇比預設值還新的語言版本可能會導致難以診斷編譯時間和執行時間錯誤。
只有 .NET 7 和更新版本才支援C# 11。 只有 .NET 6 和更新版本才支援C# 10。 只有 .NET 5 和更新版本才支援C# 9。
請查看 Visual Studio 平臺相容性 頁面,以取得 Visual Studio 版本支援哪些 .NET 版本的詳細資料。 請參閱Visual Studio for Mac平臺相容性頁面,以取得 Visual Studio for Mac 版本支援 .NET 版本的詳細資料。 檢查 Mono 頁面是否有 C# 與 C# 版本的 Mono 相容性。
Defaults
編譯器會根據下列規則決定預設值:
目標 | 版本 | 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 |
當您的專案是以具有對應預覽語言版本為目標的預覽架構時,所使用的語言版本將會是預覽語言版本。 您可以在任何環境中使用該預覽版的最新功能,而不會影響以已發行 .NET Core 版本為目標的專案。
重要
Visual Studio 2017 的新專案範本已將專案新增 <LangVersion>latest</LangVersion>
至新的專案檔。 如果您升級這些專案的目標架構,則會 覆寫預設行為。 當您更新 .NET SDK 時,應該從專案檔中移除 <LangVersion>latest</LangVersion>
。 然後,您的專案將會使用建議用於目標架構的編譯器版本。 您可以更新目標架構以存取較新的語言功能。
覆寫預設
如果您必須明確指定您的 C# 版本,您可以透過數種方式進行:
- 手動編輯您的專案檔。
- 針對子目錄中的多個專案設定語言版本。
- 設定LangVersion編譯器選項。
提示
您可以在專案屬性頁面中查看 Visual Studio 中的語言版本。 在 [ 建置] 索引 標籤下,[ 進階 ] 窗格會顯示選取的版本。
若要知道您目前使用的語言版本,請將 #error version
(區分大小寫) 放在程式碼中。 這會使編譯器報告編譯器錯誤 CS8304,其中包含正在使用的編譯器版本和目前選取的語言版本。 如需詳細資訊,請參閱 #error (C# 參考) 。
編輯專案檔
您可以在專案檔中設定語言版本。 例如,如果您明確希望存取預覽功能,您可以新增如下元素:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
preview
值會使用編譯器支援的最新預覽 C# 語言語言。
設定多個專案
若要設定多個專案,您可以建立包含 <LangVersion>
專案的Directory.Build.props檔案。 您通常會在解決方案目錄中進行。 將下列內容新增到解決方案目錄中的 Directory.Build.props 檔案:
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
在包含該檔案之目錄的所有子目錄中建置會使用預覽 C# 版本。 如需詳細資訊,請參閱 自訂您的組建。
C# 語言版本參考
下表顯示所有目前的 C# 語言版本。 如果您的編譯器較舊,可能不一定瞭解每個值。 如果您安裝最新的 .NET SDK,則您可以存取列出的所有專案。
值 | 意義 |
---|---|
preview |
編譯器會接受最新預覽版本的所有有效語言語法。 |
latest |
編譯器會接受編譯器最新已發行版本 (包括次要版本) 的語法。 |
latestMajor 或 default |
編譯器會接受編譯器最新已發行主要版本的語法。 |
11.0 |
編譯器只接受 C# 11 或更低版本中所包含的語法。 |
10.0 |
編譯器只接受包含在 C# 10 或更低版本中的語法。 |
9.0 |
編譯器只接受包含在 C# 9 或更低版本中的語法。 |
8.0 |
編譯器只會接受 C# 8.0 或更低版本中所含的語法。 |
7.3 |
編譯器只會接受 C# 7.3 或更低版本中所含的語法。 |
7.2 |
編譯器只會接受 C# 7.2 或更低版本中所含的語法。 |
7.1 |
編譯器只會接受 C# 7.1 或更低版本中所含的語法。 |
7 |
編譯器只會接受 C# 7.0 或更低版本中所含的語法。 |
6 |
編譯器只會接受 C# 6.0 或更低版本中所含的語法。 |
5 |
編譯器只會接受 C# 5.0 或更低版本中所含的語法。 |
4 |
編譯器只會接受 C# 4.0 或更低版本中所含的語法。 |
3 |
編譯器只會接受 C# 3.0 或更低版本中所含的語法。 |
ISO-2 或 2 |
編譯器只接受 ISO/IEC 23270:2006 C# (2.0) 中包含的語法。 |
ISO-1 或 1 |
編譯器只接受 ISO/IEC 23270:2003 C# (1.0/1.2) 中包含的語法。 |