C# アプリケーション内の .NET Framework ディレクトリ パスを取得するにはどうすればよいですか?
私が参照するフォルダーは「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」です
C# アプリケーション内の .NET Framework ディレクトリ パスを取得するにはどうすればよいですか?
私が参照するフォルダーは「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」です
現在の.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によって使用されたかはわかりません。
もう1つの重要な事実は、.NET 2.0、.NET 3.0、および.NET3.5アプリケーションの「現在のCLR」は「2.0」になるということです。これは、GetRuntimeDirectory()呼び出しが.NET 3.5アプリケーション(3.5ディレクトリからアセンブリの一部をロードする)内でも2.0ディレクトリを返すことを意味します。「.NETFrameworkディレクトリパス」という用語の解釈によっては、GetRuntimeDirectoryが探している情報ではない場合があります(「CLRディレクトリ」と「3.5アセンブリの元のディレクトリ」)。
簡単な方法は、Microsoft.Build.Utilities アセンブリを含めて使用することです。
using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
TargetDotNetFrameworkVersion.VersionLatest);
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);
}
[HKLM]\Software\Microsoft.NetFramework\InstallRootキーの値を読み取ります- 「C:\WINDOWS\Microsoft.NET\Framework」が得られます。次に、目的のフレームワーク バージョンを追加します。