Получение пути к каталогу .NET Framework

Как я могу получить путь к каталогу .NET Framework внутри моего приложения С#?

Папка, на которую я ссылаюсь, это "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"

Ответ 1

Путь к каталогу установки 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 сборки" ).

Ответ 2

Более простой способ - включить сборку Microsoft.Build.Utilities и использовать

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

Ответ 3

Вы можете извлечь его из реестра 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

Прочитайте значение ключа [HKLM]\Software\Microsoft.NetFramework\InstallRoot - вы получите "C:\WINDOWS\Microsoft.NET\Framework". Затем добавьте требуемую версию фреймворка.