Получение пути к каталогу .NET Framework - PullRequest
69 голосов
/ 17 декабря 2008

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

Я имею в виду папку «C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727»

Ответы [ 4 ]

176 голосов
/ 23 января 2009

Путь к каталогу установки активного CLR для текущего приложения .NET можно получить, используя следующий метод:

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). Чтение реестра не скажет вам, какой из двух каталогов использовался текущим 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»).

39 голосов
/ 17 декабря 2008

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

using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
        TargetDotNetFrameworkVersion.VersionLatest);
2 голосов
/ 17 декабря 2008

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

Источник

0 голосов
/ 17 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...