C#のプロジェクトで LangVersion を指定するのは、使用するC#言語のバージョンを明示的にコントロールするためです。
これにより、プロジェクトが使える機能や構文の範囲を制限・保証できます。
指定する意義(なぜ指定するのか?)
1. 一貫性の確保
- チームやCI環境でビルドする際に、すべての環境で同じC#機能を使うことを保証。
- 例えば、C# 12 の構文を使いたい場合、明示的に
LangVersionを12.0にする。
2. 後方互換・制限目的
- 古いバージョンに合わせたいとき(例:C# 7.3 までしか対応しないライブラリとの互換など)。
- 開発者に新機能の使用を制限したい場合にも有効。
3. 最新バージョンの明示的利用
.NET SDKに依存する “既定のバージョン” ではなく、常に明示的に最新機能を使いたいとき。
指定方法(どこに書くか)
*.csproj ファイルに記述します:
<PropertyGroup>
<LangVersion>12.0</LangVersion> <!-- 任意のバージョンを指定 -->
</PropertyGroup>
または Visual Studio のプロジェクト設定からでも編集可能です。
指定できる値(代表的なもの)
| 指定値 | 意味 |
|---|---|
default | SDK が決めた既定のバージョン |
latest(非推奨) | 使用中の SDK が対応する最新バージョン |
preview | 最新の preview 機能も含めて使える |
12.0 | C# 12 の機能を有効にする <TargetFrameworkVersion>=v4.6.2 の場合 |
7.3 | C# 7.3 に固定(古い環境との互換に) |
| 3.0 | <TargetFrameworkVersion>=.NET Framework3.5 の場合 |
*.csprojファイルに以下記述を加えると、使用できない文法をエラーにしてくれます!
実行例:C# 12 機能を使いたい場合
<PropertyGroup>
<LangVersion>12.0</LangVersion>
</PropertyGroup>
これで、たとえば「パラメータの params スパン構文」や「コレクション式」など、C# 12 の構文が使えるようになります。
注意点
- LangVersion はコンパイラの機能制限のみを意味し、.NET のランタイムバージョンとは別物です。
LangVersionを上げても、ターゲットフレームワーク(TargetFramework)が古いと、使えないAPIがある場合も。

言語バージョンの構成 - C# reference
既定の C# 言語バージョンを手動でオーバーライドする方法について説明します。 C# コンパイラでは、インストールされている SDK のバージョンまでの任意の言語バージョンをサポートできます。

コメント