Как я могу получить путь к каталогу .NET Framework внутри моего приложения С#?
Папка, на которую я ссылаюсь, это "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"
Как я могу получить путь к каталогу .NET Framework внутри моего приложения С#?
Папка, на которую я ссылаюсь, это "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"
Путь к каталогу установки CLR, активным для текущего приложения .NET, можно получить, используя следующий метод:
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
Я бы посоветовал сильно советовать не читать реестр напрямую. Например, когда приложение .NET работает в 64-битных системах, среда CLR может быть загружена из "C:\Windows\Microsoft\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" Windows\Microsoft.NET\Framework\v2.0.50727 "(цель компиляции x86). Реестр чтения не сообщает, какой из двух каталогов использовался текущей CLR.
Другим важным фактом является то, что "текущая CLR" будет "2.0" для приложений .NET 2.0,.NET 3.0 и .NET 3.5. Это означает, что вызов GetRuntimeDirectory() вернет каталог 2.0 даже в приложениях .NET 3.5 (которые загружают некоторые из своих сборок из каталога 3.5). В зависимости от вашей интерпретации термина "путь к каталогу .NET Framework", 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". Затем добавьте требуемую версию фреймворка.