web-dev-qa-db-ja.com

.NET Frameworkディレクトリパスの取得

C#アプリケーション内で.NET Frameworkディレクトリパスを取得するにはどうすればよいですか?

参照するフォルダーは「C:\ WINDOWS\Microsoft.NET\Framework\v2.0.50727」です。

69
Bruno Cartaxo

現在の.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コンパイルターゲット)。レジストリを読み取ると、2つのディレクトリのどちらが現在のCLRによって使用されたかがnotわかります。

もう1つの重要な事実は、.NET 2.0、.NET 3.0、および.NET 3.5アプリケーションでは、「現在のCLR」が「2.0」になるということです。つまり、GetRuntimeDirectory()呼び出しは、.NET 3.5アプリケーション(アセンブリの一部を3.5ディレクトリから読み込む)内でも2.0ディレクトリを返します。 「.NET Frameworkディレクトリパス」という用語の解釈によっては、GetRuntimeDirectoryが探している情報ではない場合があります(「CLRディレクトリ」と「3.5アセンブリの元のディレクトリ」)。

177
Milan Gardian

より簡単な方法は、Microsoft.Build.Utilitiesアセンブリを含めて使用することです

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

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

ソース

2
CMS