Вопрос по c#, frameworks, .net, directory – Получение пути к каталогу .NET Framework

69

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

Папка, на которую я ссылаюсь, называется «C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727».

Ваш Ответ

4   ответа
-3

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

39

.Utilities.

using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
        TargetDotNetFrameworkVersion.VersionLatest);
Это звучит намного лучше, особенно при работе с инструментами, которые влияют на процесс сборки. Jonathan Allen
175

ожно получить с помощью следующего метода:

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»).

Принятый ответ имеет 3 голоса. Это 83 (один из них мой). Paul Draper
@PaulDraper Мы достаточно умны, чтобы найтиправильный ответ."Accepted" != "Correct" Bitterblue
@ Бруно Вы можете изменить принятый ответ на этот? oleschri
Как я могу получить InstallRoot для x86 и x64 .NET Framework на 64-битных системах? Всегда ли «[HKLM] \ Software \ Microsoft.NetFramework \ InstallRoot» указывает на версию .NET для x86, даже в 64-битных системах? Мне нужно получить путь к этой папке с неуправляемым приложением, поэтому я не могу использовать метод, который вы перечислили выше. Благодарю. Paya
2

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

Источник

Я настоятельно рекомендую не обращаться к реестру напрямую (в 64-битной операционной системе это может дать неправильный ответ). Смотрите мой ответ ниже для деталей. Milan Gardian
Согласиться с @Milan - определенно не рекомендуется. Andy Johnson
@ CMS я хочу сделать то же самое, что и версия silvetlight. и если я удаляю ключ реестра, это означает, что программное обеспечение также удаляется из системы. Спасибо Dhru 'soni

Похожие вопросы