如何在C#应用程序中获取.NET Framework目录路径?
我引用的文件夹是“ C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727”
Answers:
可以使用以下方法获取当前.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程序集来自的目录”)。
您可以从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);
}
对于> = 4.5的.NET Framework版本,可以使用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();
}
}
}
读取[HKLM] \ Software \ Microsoft.NetFramework \ InstallRoot项的值-您将获得“ C:\ WINDOWS \ Microsoft.NET \ Framework”。然后附加所需的框架版本。