C#はマイクロソフトが開発するプログラミング言語であり、.NETエコシステムの進化とともに精力的なアップデートが続けられています。

新しいC#のバージョンが登場するたびに、開発者の生産性を向上させる便利な構文や機能が追加されますが、プロジェクトの環境によって使用できるバージョンが制限されることも珍しくありません。

「最新の文法を使ってコードを書いたのにコンパイルエラーになる」「自分の開発環境でどのバージョンのC#が動いているのかわからない」といった状況を回避するためには、自身の環境におけるC#のバージョンを確認する方法を正しく理解しておくことが不可欠です。

本記事では、Visual Studioの操作画面、コマンドライン、プロジェクトの設定ファイルなど、さまざまな角度からC#のバージョンを確認・指定する方法を詳しく解説します。

C#のバージョンと.NETの関係性

C#のバージョンを確認する前に、まず理解しておくべき重要なポイントがあります。

それは、C#の言語バージョンが、使用している.NET SDKのバージョンと密接に紐付いているという点です。

かつてC#のバージョンは、Visual Studioのバージョンに強く依存していましたが、現在は .NET SDK(.NET 5/6/7/8/9以降)によってデフォルトの言語バージョンが決定されます。

基本的には、ターゲットとするフレームワーク(Target Framework)を新しくすれば、それに対応する最新のC#バージョンが自動的に選択される仕組みになっています。

以下の表は、主要な.NETバージョンと、それに対応するデフォルトのC#言語バージョンの対応表です。

.NET バージョンデフォルトのC#バージョン
.NET 9C# 13
.NET 8C# 12
.NET 7C# 11
.NET 6C# 10
.NET 5C# 9.0
.NET Core 3.xC# 8.0
.NET Core 2.xC# 7.x
.NET Framework 4.xC# 7.3まで

このように、古い.NET Frameworkを使用しているプロジェクトでは、最新のC#機能がデフォルトでは利用できない場合があるため注意が必要です。

コマンドラインでC#のバージョンを確認する方法

開発環境全体でどのバージョンのC#コンパイラが利用可能かを確認するには、コマンドライン(コマンドプロンプトやPowerShell、ターミナル)を使用するのが最も確実です。

1. dotnetコマンドによる確認

現在の開発環境にインストールされている .NET SDK のバージョンを確認することで、間接的に対応するC#のバージョンを特定できます。

Shell
# インストールされているすべてのSDKリストを表示
dotnet --list-sdks

# 現在アクティブなSDKのバージョンを表示
dotnet --version
実行結果
8.0.204 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]

この場合、9.0.xxx がインストールされているため、C# 13 までの機能が利用可能であると判断できます。

2. cscコマンドによる詳細確認

C#コンパイラ(csc.exe)そのもののバージョンを確認する方法もあります。

ただし、.NET Core以降の環境では csc コマンドに直接パスが通っていないことが多いため、Visual Studioの「Developer PowerShell」または「開発者コマンドプロンプト」を使用することをお勧めします。

以下のコマンドを入力すると、コンパイラがサポートしている言語バージョンの一覧が表示されます。

Shell
# ヘルプオプションを使用して言語バージョンの一覧を表示
csc -langversion:?
実行結果
Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0
9.0
10.0
11.0
12.0
13.0 (default)
latest
latestmajor
preview

このリストの最後に表示される (default) が付いているものが、現在の環境で標準的に使用されるC#のバージョンです。

Visual StudioでプロジェクトのC#バージョンを確認する方法

特定のプロジェクトでどのC#バージョンが適用されているかを確認するには、Visual StudioのGUI操作、またはプロジェクトファイルを直接確認する方法があります。

1. プロジェクトファイルのプロパティを確認する

以前のVisual Studio(2017以前)では、プロジェクトのプロパティ画面から詳細な言語バージョンを選択できましたが、Visual Studio 2019以降ではこのUIが簡略化され、手動での変更はプロジェクトファイルを直接編集するスタイルが推奨されています。

現在の設定を確認する手順は以下の通りです。

  1. Visual Studioでプロジェクトを開く。
  2. 「ソリューションエクスプローラー」でプロジェクト名を右クリックする。
  3. 「プロジェクトファイルの編集」を選択する。
  4. XML形式のファイル(.csproj)が表示されるので、<LangVersion> タグを探す。

2. .csprojファイルによる設定の読み解き

プロジェクトファイルの中に <LangVersion> という記述がある場合、そのプロジェクトで使用されるC#のバージョンが明示的に固定されています。

XML
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <!-- ここでC#のバージョンを明示的に指定 -->
    <LangVersion>12.0</LangVersion>
  </PropertyGroup>

</Project>

もし <LangVersion> タグが存在しない場合は、ターゲットフレームワーク(TargetFramework)に基づいたデフォルトのバージョンが自動的に適用されています。

例えば上記の設定で <LangVersion> がなければ、net8.0 に対応する C# 12 が適用されます。

C#のバージョンをプログラムコードから確認する方法

実行中のアプリケーションがどのバージョンの環境で動作しているかをログに出力したい場合、プログラム内からランタイム情報を取得することができます。

ただし、プログラムコードから「C#の言語バージョン」そのものを直接取得する標準プロパティは存在しません。

言語バージョンはコンパイル時のルールであり、実行時の属性ではないからです。

その代わり、フレームワークのバージョンを取得することで、動作環境を特定できます。

C#
using System;

class Program
{
    static void Main()
    {
        // 実行中の.NETランタイムのバージョンを取得
        string version = Environment.Version.ToString();
        
        // .NETの記述(.NET 5以降で利用可能)
        string info = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;

        Console.WriteLine($"Runtime Version: {version}");
        Console.WriteLine($"Framework Info: {info}");
        
        // C#のバージョンに依存する特定の機能(例:nintなど)が使えるかどうかで
        // 間接的にコンパイル環境を確認することは可能
    }
}
実行結果
Runtime Version: 8.0.0
Framework Info: .NET 8.0.4

C#のバージョンを明示的に変更する方法

プロジェクトで特定のC#バージョンを使用したい、あるいは最新のプレビュー機能(Preview)を試したい場合は、プロジェクトファイルをカスタマイズします。

LangVersionの設定値

<LangVersion> タグに指定できる値には、数値以外にも便利なキーワードがあります。

  • latest: インストールされているSDKがサポートする最新の「マイナーバージョンを含む」安定版を使用します。
  • latestmajor: 最新の「メジャーバージョン」の安定版を使用します。
  • default: ターゲットフレームワークに基づいた標準バージョンを使用します。
  • preview: プレビュー版として提供されている最新のC#機能を使用します(実験的な機能を含む)。
  • 12.0, 11.0 などの具体的な数値: バージョンを厳密に固定します。

変更手順

  1. プロジェクト(.csproj)を開く。
  2. <PropertyGroup> セクション内に <LangVersion>latest</LangVersion> を追記する。
  3. 保存してプロジェクトをリビルドする。

これにより、例えば .NET Core 3.1 をターゲットにしながらも、コンパイラが対応していれば C# 9.0 の機能の一部を利用するといった柔軟な運用が可能になります(ただし、ランタイムのサポートが必要な機能は使えません)。

C#バージョンが反映されない場合のチェックリスト

「設定を変えたのに新しい文法がエラーになる」という場合に確認すべきポイントをまとめました。

Visual Studio のバージョン

最新の C#(例:C# 13)を利用するには、最新の Visual Studio 2022 のアップデートが必要です。

古い IDE では、たとえ SDK をインストールしていてもコンパイラが対応していないことがあります。

.NET SDK の確認

コマンドラインで dotnet --list-sdks を実行し、意図したバージョンが含まれているか確認してください。

global.json の影響

ソリューション内に global.json が存在する場合、そこで使用する SDK バージョンが固定されている可能性があり、期待する SDK が使われないことがあります。

言語バージョン関連のエラー

「機能 ‘XX’ は C# X.X では使用できません。

10.0 以上の言語バージョンを使用してください」というエラーが出る場合、プロジェクトファイルでの <LangVersion> 指定が漏れているか、誤った場所に記述されています。

必要に応じて <LangVersion>10.0</LangVersion> などを正しく設定するか、IDE/SDK の設定を確認してください。

まとめ

C#のバージョンを確認・管理する方法は、現代の.NET開発において非常に重要です。

かつてのように「Visual Studioのバージョン=C#のバージョン」という単純な構造ではなく、インストールされている .NET SDK と、プロジェクトファイルのターゲットフレームワーク設定によって決定されるという点を意識してください。

基本的には以下の3点を押さえておけば問題ありません。

  1. 全体環境の確認はコマンドラインの dotnet --list-sdkscsc -langversion:? を使用する。
  2. 個別プロジェクトの確認は .csproj ファイルの <LangVersion> タグを見る。
  3. 最新機能を使いたい場合は <LangVersion>latest または具体的なバージョン番号をプロジェクトファイルに明記する。

開発環境を最新の状態に保ち、C#が提供する強力な新機能を最大限に活用して、効率的なコーディングを実現しましょう。