获取.NET Framework目录路径

时间:2008-12-17 20:10:58

标签: c# .net frameworks directory

如何在C#应用程序中获取.NET Framework目录路径?

我所指的文件夹是“C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727”

5 个答案:

答案 0 :(得分:175)

可以使用以下方法获取当前.NET应用程序活动的CLR安装目录的路径:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

我会强烈建议不要直接阅读注册表。例如,当.NET应用程序在64位系统中运行时,可以从“C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727”(AnyCPU,x64编译目标)或“C:\”加载CLR。 Windows \ Microsoft.NET \ Framework \ v2.0.50727“(x86编译目标)。阅读注册表将告诉您当前CLR使用了哪两个目录。

另一个重要的事实是,对于.NET 2.0,.NET 3.0和.NET 3.5应用程序,“当前的CLR”将是“2.0”。这意味着即使在.NET 3.5应用程序(从3.5目录加载它们的一些程序集)中,GetRuntimeDirectory()调用也将返回2.0目录。根据您对术语“.NET Framework目录路径”的解释,GetRuntimeDirectory可能不是您要查找的信息(“CLR目录”与“3.5程序集来自的目录”)。

答案 1 :(得分:39)

更简单的方法是包含Microsoft.Build.Utilities程序集并使用

using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
        TargetDotNetFrameworkVersion.VersionLatest);

答案 2 :(得分:2)

您可以从Windows注册表中获取它:

using System;
using Microsoft.Win32;

// ...

public static string GetFrameworkDirectory()
{
  // This is the location of the .Net Framework Registry Key
  string framworkRegPath = @"Software\Microsoft\.NetFramework";

  // Get a non-writable key from the registry
  RegistryKey netFramework = Registry.LocalMachine.OpenSubKey(framworkRegPath, false);

  // Retrieve the install root path for the framework
  string installRoot = netFramework.GetValue("InstallRoot").ToString();

  // Retrieve the version of the framework executing this program
  string version = string.Format(@"v{0}.{1}.{2}\",
    Environment.Version.Major, 
    Environment.Version.Minor,
    Environment.Version.Build); 

  // Return the path of the framework
  return System.IO.Path.Combine(installRoot, version);     
}

Source

答案 3 :(得分:0)

对于.NET Framework版本> = 4.5,an official way from MSDN

internal static class DotNetFrameworkLocator
{
    public static string GetInstallationLocation()
    {
        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)
                throw new Exception();

            var value = ndpKey.GetValue("InstallPath") as string;
            if (value != null)
                return value;
            else
                throw new Exception();
        }
    }
}

答案 4 :(得分:-3)

读取 [HKLM] \ Software \ Microsoft.NetFramework \ InstallRoot 键的值 - 您将获得“C:\ WINDOWS \ Microsoft.NET \ Framework”。然后添加所需的框架版本。