IT

【C#】言語バージョンの指定(LangVersion)

C#のプロジェクトで LangVersion を指定するのは、使用するC#言語のバージョンを明示的にコントロールするためです。
これにより、プロジェクトが使える機能や構文の範囲を制限・保証できます。


指定する意義(なぜ指定するのか?)

1. 一貫性の確保

  • チームやCI環境でビルドする際に、すべての環境で同じC#機能を使うことを保証。
  • 例えば、C# 12 の構文を使いたい場合、明示的に LangVersion12.0 にする。

2. 後方互換・制限目的

  • 古いバージョンに合わせたいとき(例:C# 7.3 までしか対応しないライブラリとの互換など)。
  • 開発者に新機能の使用を制限したい場合にも有効。

3. 最新バージョンの明示的利用

  • .NET SDK に依存する “既定のバージョン” ではなく、常に明示的に最新機能を使いたいとき。

指定方法(どこに書くか)

*.csproj ファイルに記述します:

<PropertyGroup>
  <LangVersion>12.0</LangVersion> <!-- 任意のバージョンを指定 -->
</PropertyGroup>

または Visual Studio のプロジェクト設定からでも編集可能です。


指定できる値(代表的なもの)

指定値意味
defaultSDK が決めた既定のバージョン
latest(非推奨)使用中の SDK が対応する最新バージョン
preview最新の preview 機能も含めて使える
12.0C# 12 の機能を有効にする
<TargetFrameworkVersion>=v4.6.2 の場合
7.3C# 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 のバージョンまでの任意の言語バージョンをサポートできます。

コメント