방법: 설치된 .NET Framework 버전 확인How to: Determine which .NET Framework versions are installed

사용자는 자신의 컴퓨터에 여러 버전의 .NET Framework를 설치하여 실행할 수 있습니다.Users can install and run multiple versions of the .NET Framework on their computers. 따라서 앱을 개발하거나 배포할 때는 사용자의 컴퓨터에 어떤 .NET Framework 버전이 설치되었는지 알아야 합니다.When you develop or deploy your app, you might need to know which .NET Framework versions are installed on the user’s computer. 레지스트리에는 컴퓨터에 설치된 .NET Framework 버전 목록이 포함되어 있습니다.The registry contains a list of the .NET Framework versions installed on a computer.

.NET Framework는 각 버전으로 식별되는 다음과 같은 2개의 주요 구성 요소로 구성됩니다.The .NET Framework consists of two main components, which are versioned separately:

  • 앱의 기능을 제공하는 형식 및 리소스 컬렉션에 해당하는 어셈블리 집합.A set of assemblies, which are collections of types and resources that provide the functionality for your apps. .NET Framework와 어셈블리는 동일한 버전 번호를 공유합니다.The .NET Framework and assemblies share the same version number. 예를 들어, .NET Framework 버전에는 4.5, 4.6.1, 4.7.2가 있습니다.For example, .NET Framework versions include 4.5, 4.6.1, and 4.7.2.

  • 앱 코드를 관리하고 실행하는 CLR(공용 언어 런타임).The common language runtime (CLR), which manages and executes your app's code. 하나의 CLR 버전이 여러 개의.NET Framework 버전을 지원합니다.A single CLR version typically supports multiple .NET Framework versions. 예를 들어 CLR 버전이 4.0.30319.‘xxxxx’이고 ‘xxxxx’가 42000보다 작은 경우 .NET Framework 버전 4~4.5.2를 지원합니다. For example, CLR version 4.0.30319.xxxxx where xxxxx is less than 42000, supports .NET Framework versions 4 through 4.5.2. CLR 버전이 4.0.30319.42000보다 크거나 같으면 .NET Framework 4.6 이상 버전의 .NET Framework를 지원합니다.CLR version greater than or equal to 4.0.30319.42000 supports .NET Framework versions starting with .NET Framework 4.6.

커뮤니티에서 유지 관리되는 도구를 사용하여 설치된 .NET Framework 버전을 확인할 수 있습니다.Community-maintained tools are available to help detect which .NET Framework versions are installed:

.NET Framework의 버전별로 설치된 업데이트를 검색하는 방법에 대한 자세한 내용은 방법: 설치된 .NET Framework 업데이트 확인.For information about detecting the installed updates for each version of the .NET Framework, see How to: Determine which .NET Framework updates are installed.

.NET Framework 4.5 이상 버전 검색Detect .NET Framework 4.5 and later versions

컴퓨터에 설치된 .NET Framework 버전(4.5 이상)은 레지스트리에서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full에 나와 있습니다.The version of .NET Framework (4.5 and later) installed on a machine is listed in the registry at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. Full 하위 키가 없으면 .NET Framework 4.5 이상이 설치되지 않은 것입니다.If the Full subkey is missing, then .NET Framework 4.5 or above isn't installed.

참고

레지스트리 경로에서 NET Framework Setup 하위 키는 마침표로 시작되지 ‘않습니다’ .The NET Framework Setup subkey in the registry path does not begin with a period.

레지스트리의 Release REG_DWORD 값은 설치된 .NET Framework 버전을 나타냅니다.The Release REG_DWORD value in the registry represents the version of .NET Framework installed.

.NET Framework 버전.NET Framework version ReleaseValue of Release
.NET Framework 4.5.NET Framework 4.5 모든 Windows 운영 체제: 378389All Windows operating systems: 378389
.NET Framework 4.5.1.NET Framework 4.5.1 Windows 8.1 및 Windows Server 2012 R2: 378675On Windows 8.1 and Windows Server 2012 R2: 378675
다른 모든 Windows 운영 체제: 378758On all other Windows operating systems: 378758
.NET Framework 4.5.2.NET Framework 4.5.2 모든 Windows 운영 체제: 379893All Windows operating systems: 379893
.NET Framework 4.6.NET Framework 4.6 Windows 10: 393295On Windows 10: 393295
다른 모든 Windows 운영 체제: 393297On all other Windows operating systems: 393297
.NET Framework 4.6.1.NET Framework 4.6.1 Windows 10 11월 업데이트 운영 체제: 394254On Windows 10 November Update systems: 394254
다른 모든 Windows 운영 체제(Windows 10 포함): 394271On all other Windows operating systems (including Windows 10): 394271
.NET Framework 4.6.2.NET Framework 4.6.2 Windows 10 1주년 업데이트 및 Windows Server 2016: 394802On Windows 10 Anniversary Update and Windows Server 2016: 394802
다른 모든 Windows 운영 체제(다른 Windows 10 운영 체제 포함): 394806On all other Windows operating systems (including other Windows 10 operating systems): 394806
.NET Framework 4.7.NET Framework 4.7 Windows 10 Creators Update: 460798On Windows 10 Creators Update: 460798
다른 모든 Windows 운영 체제(다른 Windows 10 운영 체제 포함): 460805On all other Windows operating systems (including other Windows 10 operating systems): 460805
.NET Framework 4.7.1.NET Framework 4.7.1 Windows 10 Fall Creators Update 및 Windows Server, 버전 1709: 461308On Windows 10 Fall Creators Update and Windows Server, version 1709: 461308
다른 모든 Windows 운영 체제(다른 Windows 10 운영 체제 포함): 461310On all other Windows operating systems (including other Windows 10 operating systems): 461310
.NET Framework 4.7.2.NET Framework 4.7.2 Windows 10 2018년 4월 업데이트 및 Windows Server, 버전 1803: 461808On Windows 10 April 2018 Update and Windows Server, version 1803: 461808
Windows 10 2018년 4월 업데이트 및 Windows Server, 버전 1803 이외의 모든 Windows 운영 체제: 461814On all Windows operating systems other than Windows 10 April 2018 Update and Windows Server, version 1803: 461814
.NET Framework 4.8.NET Framework 4.8 Windows 10 2019년 5월 업데이트 및 Windows 10 2019년 11월 업데이트: 528040On Windows 10 May 2019 Update and Windows 10 November 2019 Update: 528040
Windows 10 및 Windows Server 버전 1909: 528209On Windows 10 and Windows Server, version 1909: 528209
다른 모든 Windows 운영 체제(다른 Windows 10 운영 체제 포함): 528049On all other Windows operating systems (including other Windows 10 operating systems): 528049

최소 버전Minimum version

‘최소’ 버전의 .NET Framework가 있는지 확인하려면 이전 표에서 해당 버전의 가장 작은 Release REG_DWORD 값을 사용하세요. To determine whether a minimum version of the .NET Framework is present, use the smallest Release REG_DWORD value for that version from the previous table.

예를 들어 애플리케이션이 .NET Framework 4.8 이상 버전에서 실행되는 경우 528040과 같거나 이보다 큰 Release REG_DWORD 값을 테스트합니다. For example, if your application runs under .NET Framework 4.8 or a later version, test for a Release REG_DWORD value that is greater than or equal to 528040.

.NET Framework 버전.NET Framework version 최소값Minimum value
.NET Framework 4.5.NET Framework 4.5 378389378389
.NET Framework 4.5.1.NET Framework 4.5.1 378675378675
.NET Framework 4.5.2.NET Framework 4.5.2 379893379893
.NET Framework 4.6.NET Framework 4.6 393295393295
.NET Framework 4.6.1.NET Framework 4.6.1 394254394254
.NET Framework 4.6.2.NET Framework 4.6.2 394802394802
.NET Framework 4.7.NET Framework 4.7 460798460798
.NET Framework 4.7.1.NET Framework 4.7.1 461308461308
.NET Framework 4.7.2.NET Framework 4.7.2 461808461808
.NET Framework 4.8.NET Framework 4.8 528040528040

레지스트리 편집기 사용Use Registry Editor

  1. 시작 메뉴에서 실행을 선택하고 regedit을 입력한 다음, OK를 선택합니다.From the Start menu, choose Run, enter regedit, and then select OK.

    regedit을 실행하려면 관리자 자격 증명이 있어야 합니다.You must have administrative credentials to run regedit.

  2. 레지스트리 편집기에서 다음 하위 키를 엽니다. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.In the Registry Editor, open the following subkey: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. 전체하위 키가 없으면 .NET Framework 4.5 이상이 설치되어 있지 않은 것입니다.If the Full subkey isn't present, then you don't have the .NET Framework 4.5 or later installed.

  3. Release라는 REG_DWORD 항목을 확인합니다.Check for a REG_DWORD entry named Release. 릴리스 DWORD가 있으면 컴퓨터에 .NET Framework 4.5 이상이 설치된 것입니다.If it exists, then you have .NET Framework 4.5 or later installed. 해당 값은 .NET Framework의 특정 버전에 해당합니다.Its value corresponds to a particular version of the .NET Framework. 예를 들어 다음 그림에서Release 항목의 값은 528040으로, 이것은 .NET Framework 4.8의 릴리스 키입니다.In the following figure, for example, the value of the Release entry is 528040, which is the release key for .NET Framework 4.8.

    .NET Framework 4.5.에 대한 레지스트리 항목Registry entry for the .NET Framework 4.5

PowerShell을 사용하여 최소 버전 확인Use PowerShell to check for a minimum version

PowerShell 명령을 사용하여 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 하위 키의 Release 항목값을 확인합니다.Use PowerShell commands to check the value of the Release entry of the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full subkey.

다음 예제에서는 릴리스 항목 값을 확인하여 .NET Framework 4.6.2 이상이 설치되어 있는지 확인합니다.The following examples check the value of the Release entry to determine whether the .NET Framework 4.6.2 or later is installed. 설치된 경우 True 코드 반환, 설치되지 않은 경우 False 코드 반환.This code returns True if it's installed and False otherwise.

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

코드를 사용하여 레지스트리를 쿼리Query the registry using code

  1. RegistryKey.OpenBaseKeyRegistryKey.OpenSubKey 메서드를 사용하여 Windows 레지스트리의 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full 하위 키에 액세스합니다.Use the RegistryKey.OpenBaseKey and RegistryKey.OpenSubKey methods to access the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full subkey in the Windows registry.

    중요

    실행 중인 앱이 32비트이고 64비트 Windows에서 실행되는 경우 레지스트리 경로는 이전에 나열된 것과 다릅니다.If the app you're running is 32-bit and running in 64-bit Windows, the registry paths will be different than previously listed. 64비트 레지스트리는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 하위 키에서 사용할 수 있습니다.The 64-bit registry is available in the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ subkey. 예를 들어 .NET Framework 4.5의 레지스트리 하위 키는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full입니다.For example, the registry subkey for .NET Framework 4.5 is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\Full.

  2. Release REG_DWORD 값을 확인하여 설치된 버전을 확인합니다.Check the Release REG_DWORD value to determine the installed version. 이후 버전과의 호환성을 유지하려는 경우 버전의 값이 .NET Framework 버전 표에 나와 있는 값 이상인지를 확인하면 됩니다.To be forward-compatible, check for a value greater than or equal to the value listed in the .NET Framework version table.

다음 예제에서는 레지스트리에서 릴리스 항목값을 확인하여 .NET Framework 4.5 이상 버전이 설치되어 있는지 확인합니다.The following example checks the value of the Release entry in the registry to find the .NET Framework 4.5 and later versions that are installed:

using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      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";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1
Imports Microsoft.Win32

Public Module GetDotNetVersion
    Public Sub Main()
        Get45PlusFromRegistry()
    End Sub

    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 
                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 >= will enable forward compatibility.
    Private Function CheckFor45PlusVersion(releaseKey As Integer) As String
        If releaseKey >= 528040 Then
            Return "4.8 or later"
        Else If releaseKey >= 461808 Then
            Return "4.7.2" 
        Else If releaseKey >= 461308 Then
            Return "4.7.1"
        Else If releaseKey >= 460798 Then
            Return "4.7"
        Else If releaseKey >= 394802 Then
            Return "4.6.2"
        Else If releaseKey >= 394254 Then 
            Return "4.6.1"
        Else If releaseKey >= 393295 Then
            Return "4.6"
        Else If releaseKey >= 379893 Then
            Return "4.5.2"
        Else If releaseKey >= 378675 Then
            Return "4.5.1"
        Else If 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
End Module
' The example displays output like the following:
'       .NET Framework Version: 4.6.1

이 예제에서는 버전을 확인하기 위한 권장된 방법을 수행합니다.This example follows the recommended practice for version checking:

  • 릴리스항목의 값이 알려진 릴리스 키의 값보다 크거나 같은지 확인합니다.It checks whether the value of the Release entry is greater than or equal to the value of the known release keys.
  • 최신 버전에서 가장 오래된 버전 순서대로 확인합니다.It checks in order from most recent version to earliest version.

.NET Framework 1.0~4.0 검색Detect .NET Framework 1.0 through 4.0

1.1에서 4.0까지의 각 .NET Framework 버전은 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP의 하위 키로 표시됩니다.Each version of .NET Framework from 1.1 to 4.0 is listed as a subkey at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP. 다음 표에서는 각 .NET Framework 버전의 경로를 에 나열합니다.The following table lists the path to each .NET Framework version. 대부분 버전의 Install REG_DWORD 값은 1이고, 이는 해당 버전이 설치되었음을 나타냅니다.For most versions, there's a Install REG_DWORD value of 1 to indicate this version is installed. 이러한 하위 키에는 버전 문자열을 포함하는 Version REG_SZ 값도 있습니다.In these subkeys, there's also a Version REG_SZ value that contains a version string.

참고

레지스트리 경로에서 NET Framework Setup 하위 키는 마침표로 시작되지 ‘않습니다’ .The NET Framework Setup subkey in the registry path does not begin with a period.

프레임워크 버전Framework Version 레지스트리 하위 키Registry Subkey Value
1.01.0 HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705HKLM\Software\Microsoft\.NETFramework\Policy\v1.0\3705 Install REG_SZ가 1과 같음Install REG_SZ equals 1
1.11.1 HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322HKLM\Software\Microsoft\NET Framework Setup\NDP\v1.1.4322 Install REG_DWORD가 1과 같음Install REG_DWORD equals 1
2.02.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727HKLM\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727 Install REG_DWORD가 1과 같음Install REG_DWORD equals 1
3.03.0 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\SetupHKLM\Software\Microsoft\NET Framework Setup\NDP\v3.0\Setup InstallSuccess REG_DWORD가 1과 같음InstallSuccess REG_DWORD equals 1
3.53.5 HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5HKLM\Software\Microsoft\NET Framework Setup\NDP\v3.5 Install REG_DWORD가 1과 같음Install REG_DWORD equals 1
4.0 클라이언트 프로필4.0 Client Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\ClientHKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client Install REG_DWORD가 1과 같음Install REG_DWORD equals 1
4.0 전체 프로필4.0 Full Profile HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\FullHKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Full Install REG_DWORD가 1과 같음Install REG_DWORD equals 1

중요

실행 중인 앱이 32비트이고 64비트 Windows에서 실행되는 경우 레지스트리 경로는 이전에 나열된 것과 다릅니다.If the app you're running is 32-bit and running in 64-bit Windows, the registry paths will be different than previously listed. 64비트 레지스트리는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 하위 키에서 사용할 수 있습니다.The 64-bit registry is available in the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ subkey. 예를 들어 .NET Framework 3.5의 레지스트리 하위 키는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5입니다.For example, the registry subkey for .NET Framework 3.5 is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

.NET Framework 1.0 하위 키의 레지스트리 경로는 다른 하위 키와 다릅니다.Notice that the registry path to the .NET Framework 1.0 subkey is different from the others.

레지스트리 편집기 사용(이전 프레임워크 버전)Use Registry Editor (older framework versions)

  1. 시작 메뉴에서 실행을 선택하고 regedit을 입력한 다음, OK를 선택합니다.From the Start menu, choose Run, enter regedit, and then select OK.

    regedit을 실행하려면 관리자 자격 증명이 있어야 합니다.You must have administrative credentials to run regedit.

  2. 확인하려는 버전과 일치하는 하위 키를 엽니다.Open the subkey that matches the version you want to check. .NET Framework 1.0~4.0 검색 섹션의 표를 사용합니다.Use the table in the Detect .NET Framework 1.0 through 4.0 section.

    다음 그림은 .NET Framework 3.5의 하위 키와 Version 값을 보여줍니다.The following figure shows the subkey and its Version value for .NET Framework 3.5.

    .NET Framework 3.5에 대한 레지스트리 항목The registry entry for the .NET Framework 3.5.

코드를 사용한 레지스트리 쿼리(이전 프레임워크 버전)Query the registry using code (older framework versions)

Microsoft.Win32.RegistryKey 클래스를 사용하여 Windows 레지스트리의HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP 하위 키에 액세스합니다.Use the Microsoft.Win32.RegistryKey class to access the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP subkey in the Windows registry.

중요

실행 중인 앱이 32비트이고 64비트 Windows에서 실행되는 경우 레지스트리 경로는 이전에 나열된 것과 다릅니다.If the app you're running is 32-bit and running in 64-bit Windows, the registry paths will be different than previously listed. 64비트 레지스트리는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ 하위 키에서 사용할 수 있습니다.The 64-bit registry is available in the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ subkey. 예를 들어 .NET Framework 3.5의 레지스트리 하위 키는 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5입니다.For example, the registry subkey for .NET Framework 3.5 is HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v3.5.

다음 예제에서는 설치된 .NET Framework 1~4 버전을 찾습니다.The following example finds the .NET Framework 1 through 4 versions that are installed:

using Microsoft.Win32;
using System;

public static class VersionTest
{
    public static void Main()
    {
        GetVersionFromRegistry();
    }
    
    private static void GetVersionFromRegistry()
    {
        // Opens 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, or an empty string if there is none.
                    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 (!(string.IsNullOrEmpty(sp)) && install == "1")
                        {
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}");
                        }
                    }
                    if (! string.IsNullOrEmpty(name))
                    {
                        continue;
                    }
                    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 (!(string.IsNullOrEmpty(sp )) && install == "1")
                            {
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}");
                            }
                            else if (install == "1")
                            {
                                Console.WriteLine($"  {subKeyName}  {name}");
                            }
                        }
                    }
                }
            }
        }
    }
}
// The example displays output similar to the following:
//        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
Imports Microsoft.Win32

Public Module VersionTest
    Public Sub Main()
        GetVersionFromRegistry()
    End Sub
    
    Private Sub GetVersionFromRegistry()

        ' 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}")
                    Else
                        If Not String.IsNullOrEmpty(sp) AndAlso install = "1" Then
                            Console.WriteLine($"{versionKeyName}  {name}  SP{sp}")
                        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}")
                        Else
                            If Not String.IsNullOrEmpty(sp) AndAlso install = "1" Then
                                Console.WriteLine($"{subKeyName}  {name}  SP{sp}")
                            ElseIf install = "1" Then
                                Console.WriteLine($"  {subKeyName}  {name}")
                            End If
                        End If
                    Next
                End If
            Next
        End Using
    End Sub
End Module
' The example displays output similar to the following:
'        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 버전 찾기Find CLR versions

.NET Framework와 함께 설치된 .NET Framework CLR은 별도로 버전이 지정됩니다.The .NET Framework CLR installed with .NET Framework is versioned separately. .NET Framework CLR의 버전을 검색하는 두 가지 방법은 다음과 같습니다.There are two ways to detect the version of the .NET Framework CLR:

  • Clrver.exe 도구The Clrver.exe tool

    CLR 버전 도구(Clrver.exe)를 사용하여 컴퓨터에 설치된 CRL의 버전을 확인합니다.Use the CLR Version tool (Clrver.exe) to determine which versions of the CLR are installed on a computer. Visual Studio용 개발자 명령 프롬프트를 열고 clrver를 입력합니다.Open the Developer Command Prompt for Visual Studio and enter clrver.

    샘플 출력:Sample output:

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

    중요

    .NET Framework 4.5 이상 버전의 경우 Environment.Version 속성을 사용하여 CLR의 버전을 확인하지 않습니다.For .NET Framework 4.5 and later versions, don't use the Environment.Version property to detect the version of the CLR. 대신 .NET Framework 4.5 이상 버전 검색에 설명된 대로 레지스트리를 쿼리합니다.Instead, query the registry as described in Detect .NET Framework 4.5 and later versions.

    1. Version개체를 검색하기 위해 Environment.Version속성을 쿼리합니다.Query the Environment.Version property to retrieve a Version object.

      반환된 System.Version개체는 현재 코드를 실행하는 런타임 버전을 식별합니다.The returned System.Version object identifies the version of the runtime that's currently executing the code. 컴퓨터에 설치된 어셈블리 버전이나 다른 런타임 버전은 반환하지 않습니다.It doesn't return assembly versions or other versions of the runtime that may have been installed on the computer.

      .NET Framework 버전 4, 4.5, 4.5.1 및 4.5.2의 경우 반환된 Version 개체 문자열 표현은 4.0.30319.‘xxxxx’ 형식이며, ‘xxxxx’는 42000보다 작습니다. For .NET Framework versions 4, 4.5, 4.5.1, and 4.5.2, the string representation of the returned Version object has the form 4.0.30319.xxxxx, where xxxxx is less than 42000. .NET Framework 4.6 및 이후 버전의 경우 형식은 4.0.30319.42000입니다.For .NET Framework 4.6 and later versions, it has the form 4.0.30319.42000.

    2. Version 개체를 가져온 후, 다음과 같이 개체를 쿼리합니다.After you have the Version object, query it as follows:

      • 주 릴리스 식별자(예:버전 4.0의 경우 4)는 Version.Major속성을 사용합니다.For the major release identifier (for example, 4 for version 4.0), use the Version.Major property.

      • 부 릴리스 식별자(예:버전 4.0의 경우 0)는 Version.Minor속성을 사용합니다.For the minor release identifier (for example, 0 for version 4.0), use the Version.Minor property.

      • 전체 버전 문자열(예를 들어4.0.30319.18010)에는 Version.ToString메서드를 사용합니다.For the entire version string (for example, 4.0.30319.18010), use the Version.ToString method. 메서드는 코드를 실행 하는 런타임 버전을 반영하는 단일 값을 반환합니다.This method returns a single value that reflects the version of the runtime that's executing the code. 이는 컴퓨터에 설치된 어셈블리 버전이나 다른 런타임 버전은 반환하지 않습니다.It doesn't return assembly versions or other runtime versions that may be installed on the computer.

    다음 예제에서는 Environment.Version속성을 사용하여 CLR 버전 정보를 검색합니다.The following example uses the Environment.Version property to retrieve CLR version information:

    using System;
    
    public class VersionTest
    {
        public static void Main()
        {
            Console.WriteLine($"Version: {Environment.Version}");
        }
    }
    // The example displays output similar to the following:'
    //    Version: 4.0.30319.18010
    
    Imports Microsoft.Win32
    
    Public Module VersionTest
       Public Sub Main()
          GetVersionFromEnvironment()
       End Sub
       
        Private Sub GetVersionFromEnvironment()
            Console.WriteLine($"Version: {Environment.Version}")
        End Sub
    End Module
    ' The example displays output similiar to the following:'
    '    Version: 4.0.30319.18010
    
    

참조See also