方法: インストールされている .NET Framework バージョンを確認する

ユーザーはコンピューターに複数のバージョンの .NET Framework をインストールして実行できます。 アプリを開発または配置する場合、どのバージョンの .NET Framework がユーザーのコンピューターにインストールされているかを確認しなければならない場合があります。 レジストリには、コンピューターにインストールされている .NET Framework のバージョンの一覧が含まれています。

Note

この記事は .NET Framework に固有のものです。 インストールされている .NET Core および .NET 5 以降の SDK とランタイムを確認するには、「.NET が既にインストールされていることを確認する方法」を参照してください。

.NET Framework は、個別にバージョン管理される 2 つの主要コンポーネントで構成されています。

  • アプリに機能を提供する型やリソースのコレクションである一連のアセンブリ。 .NET Framework とアセンブリは同じバージョン番号を共有します。 たとえば、.NET Framework のバージョンには、4.5、4.6.1、および 4.7.2 が含まれます。

  • アプリのコードを管理および実行する共通言語ランタイム (CLR)。 1 つの CLR バージョンは、通常複数の NET Framework バージョンをサポートしています。 たとえば、CLR バージョン 4.0.30319.xxxxxxxxxx が 42000 未満の場合、.NET Framework バージョン 4 から 4.5.2 がサポートされます。 4\.0.30319.42000 以上の CLR バージョンでは、.NET Framework 4.6 以降の .NET Framework バージョンがサポートされます。

コミュニティで管理されているツールを使用して、インストールされている .NET Framework バージョンを検出できます。

.NET Framework の各バージョン用にインストールされている更新プログラムの検出については、「方法: インストールされている .NET Framework の更新プログラムを確認する」を参照してください。

アプリが実行されている .NET の実装とバージョンを確認する

RuntimeInformation.FrameworkDescription プロパティを使用して、アプリが実行されている .NET の実装とバージョンを照会できます。 アプリが .NET Framework で実行されている場合、出力は次のようになります。

.NET Framework 4.8.4250.0

これに対して、アプリが .NET Core または .NET 5 以降で実行されている場合、出力は次のようになります。

.NET Core 3.1.9
.NET 5.0.0

.NET Framework 4.5 以降のバージョンを検出する

コンピューターにインストールされている .NET Framework (4.5 以降) のバージョンは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full のレジストリに一覧されています。 Full サブキーが見つからない場合、.NET Framework 4.5 以降はインストールされていません。

Note

レジストリ パスの NET Framework Setup サブキーの先頭は、ピリオドでは "ありません"。

レジストリの Release REG_DWORD の値は、インストールされている .NET Framework のバージョンを表します。

.NET Framework のバージョン Release の値
.NET Framework 4.5 すべての Windows オペレーティング システム:378389
.NET Framework 4.5.1 Windows 8.1 および Windows Server 2012 R2:378675
他のすべての Windows オペレーティング システム:378758
.NET Framework 4.5.2 すべての Windows オペレーティング システム:379893
.NET Framework 4.6 Windows 10:393295
他のすべての Windows オペレーティング システム:393297
.NET Framework 4.6.1 Windows 10 November Update システム:394254
他のすべての Windows オペレーティング システム (Windows 10 を含む):394271
.NET Framework 4.6.2 Windows 10 Anniversary Update および Windows Server 2016 の場合:394802
他のすべての Windows オペレーティング システム (他の Windows 10 オペレーティング システムを含む):394806
.NET Framework 4.7 Windows 10 Creators Update:460798
他のすべての Windows オペレーティング システム (他の Windows 10 オペレーティング システムを含む):460805
.NET Framework 4.7.1 Windows 10 Fall Creators Update および Windows Server バージョン 1709:461308
他のすべての Windows オペレーティング システム (他の Windows 10 オペレーティング システムを含む):461310
.NET Framework 4.7.2 Windows 10 April 2018 Update および Windows Server バージョン 1803:461808
Windows 10 April 2018 Update および Windows Server バージョン 1803 以外のすべての Windows オペレーティング システム:461814
.NET Framework 4.8 Windows 10 May 2019 Update および Windows 10 November 2019 Update:528040
Windows 10 の 2020 年 5 月の更新プログラム、2020 年 10 月の更新プログラム、2021 年 5 月の更新プログラム、2021 年 11 月の更新プログラム、2022 年の更新プログラム: 528372
Windows 11 および Windows Server 2022: 528449
他のすべての Windows オペレーティング システム (他の Windows 10 オペレーティング システムを含む):528049
.NET Framework 4.8.1 Windows 11 2022 Update: 533320
その他のすべての Windows オペレーティング システム: 533325

最小バージョン

.NET Framework の "最小" バージョンが存在するかどうかを判断するには、Release REG_DWORD 値が次の表にある、それに対応する値以上かどうかを確認します。 たとえば、アプリケーションが .NET Framework 4.8 以降のバージョンで実行されている場合、Release REG_DWORD の値が 528040 "以上" であることを確認します。

.NET Framework のバージョン 最小値
.NET Framework 4.5 378389
.NET Framework 4.5.1 378675
.NET Framework 4.5.2 379893
.NET Framework 4.6 393295
.NET Framework 4.6.1 394254
.NET Framework 4.6.2 394802
.NET Framework 4.7 460798
.NET Framework 4.7.1 461308
.NET Framework 4.7.2 461808
.NET Framework 4.8 528040
.NET Framework 4.8.1 533320

レジストリ エディターを使用する

  1. スタート メニューの [ファイル名を指定して実行] を選択し、「regedit」と入力し、 [OK] を選択します。

    (regedit を実行するには、管理特権が必要です。)

  2. レジストリ エディターで、次のサブキーを開きます。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\FullFull サブキーが存在しない場合は、.NET Framework 4.5 以降はインストールされていません。

  3. Release という REG_DWORD のエントリを確認します。 それがある場合、.NET Framework 4.5 以降がインストールされています。 その値は、.NET Framework の特定のバージョンに対応しています。 たとえば、次の図では、Release エントリの値は 528040 で、これは .NET Framework 4.8 のリリース キーです。

    .NET Framework 4.5 のレジストリ エントリ

PowerShell を使用して最小バージョンを確認する

PowerShell コマンドを使用し、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full サブキーから Release エントリの値を確認します。

次の例では、Release エントリの値を確認して、.NET Framework 4.6.2 以降がインストールされているかどうかを判断しています。 このコードでは、インストールされていない場合は、True が返され、されている場合は False が返されます。

(Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802

コードを使用してレジストリのクエリを実行する

  1. RegistryKey.OpenBaseKey メソッドと RegistryKey.OpenSubKey メソッドを使用し、Windows レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full サブキーにアクセスします。

    重要

    実行しているアプリが 32 ビットで、64 ビットの Windows で実行されている場合、レジストリ パスは前に示したものとは異なります。 64 ビットのレジストリは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ サブキーで入手できます。 たとえば、.NET Framework 4.5 のレジストリ サブキーは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full です。

  2. Release REG_DWORD の値を確認して、インストールされているバージョンを判断します。 上位互換性があるかを確認するには、.NET Framework のバージョンの表で示されている値以上の値があることを確認します。

次の例では、レジストリから Release エントリの値を確認し、インストールされている .NET Framework 4.5 から 4.8 のバージョンを探しています。

ヒント

コード ファイルの一番上にディレクティブ using Microsoft.Win32 または Imports Microsoft.Win32 を追加します (まだ追加していない場合)。

const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
    if (ndpKey != null && ndpKey.GetValue("Release") != null)
    {
        Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int)ndpKey.GetValue("Release"))}");
    }
    else
    {
        Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
    }
}

// Checking the version using >= enables forward compatibility.
string CheckFor45PlusVersion(int releaseKey)
{
    if (releaseKey >= 528040)
        return "4.8 or later";
    if (releaseKey >= 461808)
        return "4.7.2";
    if (releaseKey >= 461308)
        return "4.7.1";
    if (releaseKey >= 460798)
        return "4.7";
    if (releaseKey >= 394802)
        return "4.6.2";
    if (releaseKey >= 394254)
        return "4.6.1";
    if (releaseKey >= 393295)
        return "4.6";
    if (releaseKey >= 379893)
        return "4.5.2";
    if (releaseKey >= 378675)
        return "4.5.1";
    if (releaseKey >= 378389)
        return "4.5";
    // This code should never execute. A non-null release key should mean
    // that 4.5 or later is installed.
    return "No 4.5 or later version detected";
}
Private Sub Get45PlusFromRegistry()
    Const subkey As String = "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\"

    Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey)
        If ndpKey IsNot Nothing AndAlso ndpKey.GetValue("Release") IsNot Nothing Then
            Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion(ndpKey.GetValue("Release"))}")
        Else
            Console.WriteLine(".NET Framework Version 4.5 or later is not detected.")
        End If
    End Using
End Sub

' Checking the version using >= enables forward compatibility.
Private Function CheckFor45PlusVersion(releaseKey As Integer) As String
    If releaseKey >= 528040 Then
        Return "4.8 or later"
    ElseIf releaseKey >= 461808 Then
        Return "4.7.2"
    ElseIf releaseKey >= 461308 Then
        Return "4.7.1"
    ElseIf releaseKey >= 460798 Then
        Return "4.7"
    ElseIf releaseKey >= 394802 Then
        Return "4.6.2"
    ElseIf releaseKey >= 394254 Then
        Return "4.6.1"
    ElseIf releaseKey >= 393295 Then
        Return "4.6"
    ElseIf releaseKey >= 379893 Then
        Return "4.5.2"
    ElseIf releaseKey >= 378675 Then
        Return "4.5.1"
    ElseIf releaseKey >= 378389 Then
        Return "4.5"
    End If
    ' This code should never execute. A non-null release key should mean
    ' that 4.5 or later is installed.
    Return "No 4.5 or later version detected"
End Function

この例では、次のような出力が表示されます。

.NET Framework Version: 4.6.1

この例では、バージョンのチェックで推奨されている方法に従います。

  • Release エントリの値が、既知のリリース キー値以上かどうかを確認しています。
  • 最新バージョンから最も古いバージョンの順にチェックします。

.NET Framework 1.0 から 4.0 を検出する

.NET Framework 1.1 から 4.0 の各バージョンは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP のサブキーとして一覧されています。 次の表には、各 .NET Framework バージョンへのパスが一覧されています。 ほとんどのバージョンでは、1Install REG_DWORD の値があり、このバージョンがインストールされていることを示します。 これらのサブキーには、バージョン文字列を含む Version REG_SZ の値もあります。

Note

レジストリ パスの NET Framework Setup サブキーの先頭は、ピリオドでは "ありません"。

Framework のバージョン レジストリ サブキー [値]
1.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 Install REG_SZ は 1 と等しい
1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 Install REG_DWORD は 1 と等しい
2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 Install REG_DWORD は 1 と等しい
3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup InstallSuccess REG_DWORD は 1 と等しい
3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 Install REG_DWORD は 1 と等しい
4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client Install REG_DWORD は 1 と等しい
4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full Install REG_DWORD は 1 と等しい

重要

実行しているアプリが 32 ビットで、64 ビットの Windows で実行されている場合、レジストリ パスは前に示したものとは異なります。 64 ビットのレジストリは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ サブキーで入手できます。 たとえば、.NET Framework 3.5 のレジストリ サブキーは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5 です。

.NET Framework 1.0 サブキーへのレジストリ パスは、他のものとは異なるので注意してください。

レジストリ エディターを使用する (古いバージョンのフレームワーク)

  1. スタート メニューの [ファイル名を指定して実行] を選択し、「regedit」と入力し、 [OK] を選択します。

    regedit を実行するには、管理特権が必要です。

  2. 確認するバージョンと一致するサブキーを開きます。 「.NET Framework 1.0 から 4.0 を検出する」セクションの表を使用します。

    次の図では、.NET Framework 3.5 のサブキーとその Version の値を示しています。

    .NET Framework 3.5 のレジストリ エントリ。

コードを使用してレジストリのクエリを実行する (以前のバージョンのフレームワーク)

Microsoft.Win32.RegistryKey クラスを使用して、Windows レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP サブキーにアクセスします。

重要

実行しているアプリが 32 ビットで、64 ビットの Windows で実行されている場合、レジストリ パスは前に示したものとは異なります。 64 ビットのレジストリは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ サブキーで入手できます。 たとえば、.NET Framework 3.5 のレジストリ サブキーは、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5 です。

次の例では、インストールされている .NET Framework のバージョン 1 から 4 が検索されています。

// Open the registry key for the .NET Framework entry.
using (RegistryKey ndpKey =
        RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
        OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
{
    foreach (var versionKeyName in ndpKey.GetSubKeyNames())
    {
        // Skip .NET Framework 4.5 version information.
        if (versionKeyName == "v4")
        {
            continue;
        }

        if (versionKeyName.StartsWith("v"))
        {
            RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);

            // Get the .NET Framework version value.
            var name = (string)versionKey.GetValue("Version", "");
            // Get the service pack (SP) number.
            var sp = versionKey.GetValue("SP", "").ToString();

            // Get the installation flag.
            var install = versionKey.GetValue("Install", "").ToString();
            if (string.IsNullOrEmpty(install))
            {
                // No install info; it must be in a child subkey.
                Console.WriteLine($"{versionKeyName}  {name}");
            }
            else if (install == "1")
            {
                // Install = 1 means the version is installed.

                if (!string.IsNullOrEmpty(sp))
                {
                    Console.WriteLine($"{versionKeyName}  {name}  SP{sp}");
                }
                else
                {
                    Console.WriteLine($"{versionKeyName}  {name}");
                }
            }

            if (!string.IsNullOrEmpty(name))
            {
                continue;
            }
            // else print out info from subkeys...

            // Iterate through the subkeys of the version subkey.
            foreach (var subKeyName in versionKey.GetSubKeyNames())
            {
                RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
                name = (string)subKey.GetValue("Version", "");
                if (!string.IsNullOrEmpty(name))
                    sp = subKey.GetValue("SP", "").ToString();

                install = subKey.GetValue("Install", "").ToString();
                if (string.IsNullOrEmpty(install))
                {
                    // No install info; it must be later.
                    Console.WriteLine($"{versionKeyName}  {name}");
                }
                else if (install == "1")
                {
                    if (!string.IsNullOrEmpty(sp))
                    {
                        Console.WriteLine($"{subKeyName}  {name}  SP{sp}");
                    }
                    else
                    {
                        Console.WriteLine($"  {subKeyName}  {name}");
                    }
                }
            }
        }
    }
}
' Opens the registry key for the .NET Framework entry.
Using ndpKey As RegistryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
    OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\")

    For Each versionKeyName In ndpKey.GetSubKeyNames()
        ' Skip .NET Framework 4.5 and later.
        If versionKeyName = "v4" Then Continue For

        If versionKeyName.StartsWith("v") Then
            Dim versionKey As RegistryKey = ndpKey.OpenSubKey(versionKeyName)
            ' Get the .NET Framework version value.
            Dim name = DirectCast(versionKey.GetValue("Version", ""), String)
            ' Get the service pack (SP) number.
            Dim sp = versionKey.GetValue("SP", "").ToString()

            Dim install = versionKey.GetValue("Install", "").ToString()
            If String.IsNullOrEmpty(install) Then
                ' No install info; it must be in a child subkey.
                Console.WriteLine($"{versionKeyName}  {name}")
            ElseIf install = "1" Then

                If Not String.IsNullOrEmpty(sp) Then
                    Console.WriteLine($"{versionKeyName}  {name}  SP{sp}")
                Else
                    Console.WriteLine($"{versionKeyName}  {name}")
                End If

            End If

            If Not String.IsNullOrEmpty(name) Then
                Continue For
            End If

            For Each subKeyName In versionKey.GetSubKeyNames()
                Dim subKey As RegistryKey = versionKey.OpenSubKey(subKeyName)
                name = DirectCast(subKey.GetValue("Version", ""), String)
                If Not String.IsNullOrEmpty(name) Then
                    sp = subKey.GetValue("SP", "").ToString()
                End If

                install = subKey.GetValue("Install", "").ToString()
                If String.IsNullOrEmpty(install) Then
                    ' No install info; it must be later.
                    Console.WriteLine($"{versionKeyName}  {name}")
                ElseIf install = "1" Then

                    If Not String.IsNullOrEmpty(sp) Then
                        Console.WriteLine($"{subKeyName}  {name}  SP{sp}")
                    Else
                        Console.WriteLine($"  {subKeyName}  {name}")
                    End If

                End If
            Next
        End If
    Next
End Using

この例では、以下と類似した出力が表示されます。

v2.0.50727  2.0.50727.4927  SP2
v3.0  3.0.30729.4926  SP2
v3.5  3.5.30729.4926  SP1
v4.0
  Client  4.0.0.0

CLR のバージョンを探す

.NET Framework と共にインストールされる .NET Framework CLR は、個別にバージョン管理されます。 .NET Framework CLR のバージョンを検出するには、2 つの方法があります。

  • Clrver.exe ツール

    CLR バージョン ツール (Clrver.exe) を使用して、コンピューターにインストールされている CLR のバージョンを判断します。 Visual Studio 開発者コマンド プロンプトまたは Visual Studio Developer PowerShell を開いて、clrver と入力します。

    出力例

    Versions installed on the machine:
    v2.0.50727
    v4.0.30319
    
  • Environment クラス

    重要

    .NET Framework 4.5 以降のバージョンでは、CLR のバージョンの検出に Environment.Version プロパティを使用しないでください。 代わりに、「.NET Framework 4.5 以降のバージョンを検出する」で説明するように、レジストリのクエリを実行します。

    1. Environment.Version プロパティを照会し、Version オブジェクトを取得します。

      返された System.Version オブジェクトは、現在コードを実行しているランタイムのバージョンを示しています。 コンピューターにインストールされている可能性のある、アセンブリのバージョンやランタイムのその他のバージョンは返されません。

      .NET Framework バージョン 4、4.5、4.5.1、4.5.2 の場合は、返される Version オブジェクトの文字列表現は 4.0.30319.xxxxx という形式です。この xxxxx は 42000 未満になります。 .NET Framework 4.6 以降のバージョンの場合は、4.0.30319.42000 という形式です。

    2. Version オブジェクトを取得したら、次のようにクエリを実行します。

      • メジャー リリース識別子 (たとえば、バージョン 4.0 の場合の 4) には、Version.Major プロパティを使用します。

      • マイナー リリース識別子 (たとえば、バージョン 4.0 の場合の 0) には、Version.Minor プロパティを使用します。

      • バージョンの完全な文字列 (たとえば、4.0.30319.18010) には、Version.ToString メソッドを使用します。 このメソッドでは、コードを実行しているランタイムのバージョンを示す値が 1 つ返されます。 コンピューターにインストールされている可能性のあるアセンブリ バージョンやその他のランタイム バージョンは返されません。

    次の例では、Environment.Version プロパティを使用して CLR バージョンの情報を取得しています。

    Console.WriteLine($"Version: {Environment.Version}");
    
    Console.WriteLine($"Version: {Environment.Version}")
    

    この例では、以下と類似した出力が表示されます。

    Version: 4.0.30319.18010
    

関連項目