75

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

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

4

5 回答 5

182

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

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

强烈建议不要直接阅读注册表。例如,当 .NET 应用程序在 64 位系统中运行时,CLR 可以从“C:\Windows\Microsoft.NET\Framework64\v2.0.50727”(AnyCPU,x64 编译目标)或“C:\ 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 程序集的目录”)。

于 2009-01-23T04:32:29.350 回答
43

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

using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
        TargetDotNetFrameworkVersion.VersionLatest);
于 2008-12-17T20:39:33.680 回答
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);     
}

来源

于 2008-12-17T20:18:03.613 回答
0

对于 .NET Framework 版本 >= 4.5,来自 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();
        }
    }
}
于 2020-11-26T15:38:02.543 回答
-3

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

于 2008-12-17T20:22:56.083 回答