获取.NET Framework目录path

我怎样才能获得我的C#应用​​程序内的.NET Framework目录path?

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

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

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() 

强烈build议不要直接阅读registry。 例如,当.NET应用程序在64位系统中运行时,可以从“C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727”(AnyCPU,x64编译目标)或从“C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727“(x86编译目标)。 读取registry不会告诉你哪个目录被当前的CLR使用。

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

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

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

您可以从Windowsregistry中获取它:

 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); } 

资源

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