本文中的資訊適用於 .NET 5 和更新版本。 針對UWP專案,請參閱 選擇UWP版本一文中的這項資訊。
在 Visual Studio 中,會停用透過 UI 變更語言版本的選項,因為預設版本與專案的目標架構一致(TFM
)。 此預設組態可確保語言功能和運行時間支援之間的相容性。 若要變更 Visual Studio 中的語言版本,請變更專案的目標架構。
例如,將目標 TFM
(例如,從 .NET 6 變更為 .NET 9),會據以將語言版本從 C# 10 更新為 C# 13。 此方法可防止運行時相容性問題,並因為不支援的語言功能而將非預期的建置錯誤降到最低。
如果您需要與自動選取不同的語言版本,請參閱本文中的方法,直接在專案檔案中更改預設設定。
警告
不建議將 LangVersion
元素設定為 latest
。 此 latest
設定表示已安裝的編譯器會使用其最新版本。
latest
的值可能會隨著不同的機器而改變,使得組建不可靠。 此外,它可啟用可能需要目前 SDK 中未包含之運行時間或連結庫功能的語言功能。
如果您必須明確指定您的 C# 版本,您可以透過數種方式進行:
- 手動編輯專案檔。
- 針對子目錄中的多個專案設定語言版本。
- 設定 LangVersion 編譯器選項。
提示
您可在專案屬性頁面中查看 Visual Studio 中的語言版本。 在 [建置] 索引標籤下,[進階] 窗格會顯示選取的版本。
若要知道目前使用的語言版本,請在程式碼中放置 #error version
(區分大小寫)。 這個 pragma 會使編譯程式報告編譯程式錯誤 CS8304,其中包含編譯程式版本和目前選取的語言版本。 如需此 pragma 的詳細資訊,請參閱 #error (C# 參考)。
編輯專案檔
您可以在專案檔中設定語言版本。 例如,如果您明確想要存取預覽功能,請新增元素,例如下列範例:
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
值 preview
使用編譯程序支援的最新可用預覽 C# 語言版本。
設定多個專案
若要設定多個 C# 專案,您可以建立 Directory.Build.props 檔案,通常是在方案目錄中,其中包含 <LangVersion>
元素。 將下列設定新增至 Directory.Build.props 檔案:
<Project>
<PropertyGroup>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
在包含該檔案的目錄中,所有子目錄的組建現在皆會使用預覽 C# 版本。 如需詳細資訊,請參閱自訂組建。
備註
C# 和 VB 的版本不同。 請勿將 Directory.Build.Props 檔案用於子目錄包含這兩種語言項目的資料夾。 版本不相符。
C# 語言版本參考
重要
不支援使用比目標 TFM 相關聯的版本還新的 C# 語言版本。
下表顯示所有目前的 C# 語言版本。 較舊的編譯器可能無法了解每個值。 若安裝最新的 .NET SDK,則可存取列出的所有項目。
價值 | 意義 |
---|---|
preview |
編譯器會接受最新預覽版本的所有有效語言語法。 |
latest |
編譯器會接受編譯器最新已發行版本 (包括次要版本) 的語法。 |
latestMajor 或 default |
編譯器會接受編譯器最新已發行主要版本的語法。 |
14.0 |
編譯程式只接受 C# 14 或更低版本中包含的語法。 |
13.0 |
編譯器只接受 C# 13 或更低版本中所含的語法。 |
12.0 |
編譯器只接受 C# 12 或更低版本中所含的語法。 |
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) 所含的語法。 |