방법: 설치된 .NET Framework 버전 확인

사용자는 컴퓨터에 여러 버전의 .NET Framework를 설치하여 실행할 수 있습니다. 따라서 앱을 개발하거나 배포할 때 사용자 컴퓨터에 설치된 .NET Framework 버전을 알아야 할 수도 있습니다. 레지스트리에는 컴퓨터에 설치된 .NET Framework 버전 목록이 포함되어 있습니다.

참고

이 문서는 .NET Framework와 관련이 있습니다. 설치된 .NET Core, .NET 5 이상 SDK, 런타임을 확인하려면 .NET이 설치되어 있는지 확인하는 방법을 참조하세요.

.NET Framework는 버전이 별도로 관리되는 다음 두 가지 주요 구성 요소로 이루어져 있습니다.

  • 앱의 기능을 제공하는 형식 및 리소스 컬렉션에 해당하는 어셈블리 집합. .NET Framework와 어셈블리는 동일한 버전 번호를 공유합니다. 예를 들어, .NET Framework 버전에는 4.5, 4.6.1, 4.7.2가 있습니다.

  • 앱 코드를 관리하고 실행하는 CLR(공용 언어 런타임). 하나의 CLR 버전이 여러 개의.NET Framework 버전을 지원합니다. 예를 들어 CLR 버전이 4.0.30319.‘xxxxx’이고 ‘xxxxx’가 42000보다 작은 경우 .NET Framework 버전 4~4.5.2를 지원합니다. CLR 버전이 4.0.30319.42000보다 크거나 같으면 .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 이상이 설치되지 않은 것입니다.

참고

레지스트리 경로에서 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 11월 업데이트 운영 체제: 394254
다른 모든 Windows 운영 체제(Windows 10 포함): 394271
.NET Framework 4.6.2 Windows 10 1주년 업데이트 및 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 2018년 4월 업데이트 및 Windows Server, 버전 1803: 461808
Windows 10 2018년 4월 업데이트 및 Windows Server, 버전 1803 이외의 모든 Windows 운영 체제: 461814
.NET Framework 4.8 Windows 10 2019년 5월 업데이트 및 Windows 10 2019년 11월 업데이트: 528040
Windows 10 2020년 5월 업데이트, Windows 10 2020년 10월 업데이트, Windows 10 2021년 5월 업데이트: 528372
Windows 11 및 Windows Server 2022: 528449
다른 모든 Windows 운영 체제(다른 Windows 10 운영 체제 포함): 528049

최소 버전

.NET Framework의 ‘최소’ 버전이 있는지 확인하려면 다음 표에 나열된 해당 값보다 크거나 같은 Release REG_DWORD 값을 확인합니다. 예를 들어 애플리케이션이 .NET Framework 4.8 이상 버전에서 실행되는 경우 528040보다 ‘크거나 같은’ Release REG_DWORD 값을 테스트합니다.

.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

레지스트리 편집기 사용

  1. 시작 메뉴에서 실행을 선택하고 regedit을 입력한 다음, OK를 선택합니다.

    (regedit를 실행하려면 관리자 자격 증명이 있어야 합니다.)

  2. 레지스트리 편집기에서 다음 하위 키를 엽니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Full 하위 키가 없으면 .NET Framework 4.5 이상이 설치되지 않은 것입니다.

  3. Release라는 REG_DWORD 항목을 확인합니다. 릴리스 DWORD가 있으면 컴퓨터에 .NET Framework 4.5 이상이 설치된 것입니다. 항목 값은 특정 .NET Framework 버전에 해당합니다. 예를 들어 다음 그림에서Release 항목의 값은 528040으로, 이것은 .NET Framework 4.8의 릴리스 키입니다.

    Registry entry for .NET Framework 4.5

PowerShell을 사용하여 최소 버전 확인

PowerShell 명령을 사용하여 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 하위 키의 릴리스 항목 값을 확인합니다.

다음 예제에서는 Release 항목 값을 검사하여 .NET Framework 4.6.2 이상이 설치되어 있는지 확인합니다. 설치된 경우 True 코드 반환, 설치되지 않은 경우 False 코드 반환.

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

코드를 사용하여 레지스트리를 쿼리

  1. 및 메서드를 사용하여 Windows 레지스트리의 RegistryKey.OpenBaseKey 하위 키에 액세스합니다.RegistryKey.OpenSubKeyRegistryKey.OpenBaseKey

    중요

    실행 중인 앱이 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

이 예제에서는 버전을 확인하기 위한 권장된 방법을 수행합니다.

  • 릴리스항목의 값이 알려진 릴리스 키의 값보다 크거나 같은지 확인합니다.
  • 최신 버전에서 가장 오래된 버전 순서대로 확인합니다.

.NET Framework 1.0~4.0 검색

1.1에서 4.0까지의 각 .NET Framework 버전은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP하위 키로 나열됩니다. 다음 표에서는 각 .NET Framework 버전의 경로를 에 나열합니다. 대부분의 버전에서는 이 버전이 설치되었음을 나타내는 설치 REG_DWORD 값 이 있습니다. 이러한 하위 키에는 버전 문자열을 포함하는 Version REG_SZ 값도 있습니다.

참고

레지스트리 경로에서 NET Framework Setup 하위 키는 마침표로 시작되지 ‘않습니다’.

프레임워크 버전 레지스트리 하위 키
1.0 HKLM\Software\Microsoft\. NETFramework\Policy\v1.0\3705 설치 REG_SZ 같음
1.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 설치 REG_DWORD 같음
2.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 설치 REG_DWORD 같음
3.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup InstallSuccess REG_DWORD 같음
3.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 설치 REG_DWORD 같음
4.0 클라이언트 프로필 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client 설치 REG_DWORD 같음
4.0 전체 프로필 HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full 설치 REG_DWORD 같음

중요

실행 중인 앱이 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 값을 보여줍니다.

    The registry entry for .NET Framework 3.5.

코드를 사용한 레지스트리 쿼리(이전 프레임워크 버전)

클래스를 Microsoft.Win32.RegistryKey 사용하여 Windows 레지스트리의 Microsoft.Win32.RegistryKey 하위 키에 액세스합니다.

중요

실행 중인 앱이 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의 버전을 검색하는 두 가지 방법은 다음과 같습니다.

  • Clrver.exe 도구

    CLR 버전 도구(Clrver.exe)를 사용하여 컴퓨터에 설치된 CRL의 버전을 확인합니다. Visual Studio 개발자 명령 프롬프트 또는 Visual Studio 개발자 PowerShell을 열고 입력합니다.

    샘플 출력:

    Versions installed on the machine:
    v2.0.50727
    v4.0.30319
    
  • 클래스

    중요

    .NET Framework 4.5 이상 버전의 경우 Environment.Version 속성을 사용하여 CLR의 버전을 확인하지 않습니다. 대신 .NET Framework 4.5 이상 버전 검색에 설명된 대로 레지스트리를 쿼리합니다.

    1. Version개체를 검색하기 위해 Environment.Version속성을 쿼리합니다.

      반환된 System.Version개체는 현재 코드를 실행하는 런타임 버전을 식별합니다. 컴퓨터에 설치된 어셈블리 버전이나 다른 런타임 버전은 반환하지 않습니다.

      .NET Framework 버전 4, 4.5, 4.5.1 및 4.5.2의 경우 반환된 Version 개체의 문자열 표현에는 4.0.30319 형식이 있습니다.Version, 여기서 xxxxx는 42000보다 작습니다. .NET Framework 4.6 및 이후 버전의 경우 형식은 4.0.30319.42000입니다.

    2. Version 개체를 가져온 후, 다음과 같이 개체를 쿼리합니다.

      • 주 릴리스 식별자(예: 버전 4.0 의 경우 4)의 경우 속성을 사용합니다 .

      • 부 릴리스 식별자(예: 버전 4.0 의 경우 0)의 경우 속성을 사용합니다 .

      • 전체 버전 문자열(예: 4.0.30319.18010)의 경우 메서드를 사용합니다. 메서드는 코드를 실행 하는 런타임 버전을 반영하는 단일 값을 반환합니다. 이는 컴퓨터에 설치된 어셈블리 버전이나 다른 런타임 버전은 반환하지 않습니다.

    다음 예제에서는 Environment.Version속성을 사용하여 CLR 버전 정보를 검색합니다.

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

    예제 출력은 다음과 같습니다.

    Version: 4.0.30319.18010
    

참조