web-dev-qa-db-fra.com

Obtention du chemin du répertoire .NET Framework

Comment puis-je obtenir le chemin du répertoire .NET Framework dans mon application C #?

Le dossier auquel je fais référence est "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"

69
Bruno Cartaxo

Le chemin d'accès au répertoire d'installation du CLR actif pour l'application .NET actuelle peut être obtenu à l'aide de la méthode suivante:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

Je voudrais fortement des conseils contre la lecture directe du registre. Par exemple, lorsqu'une application .NET s'exécute dans des systèmes 64 bits, le CLR peut être chargé à partir de "C:\Windows\Microsoft.NET\Framework64\v2.0.50727" (AnyCPU, cibles de compilation x64) ou à partir de "C:\Windows\Microsoft.NET\Framework\v2.0.50727 "(cible de compilation x86). La lecture du registre vous pas vous indiquera lequel des deux répertoires a été utilisé par le CLR actuel.

Un autre fait important est que "le CLR actuel" sera "2.0" pour les applications .NET 2.0, .NET 3.0 et .NET 3.5. Cela signifie que l'appel GetRuntimeDirectory () renverra le répertoire 2.0 même dans les applications .NET 3.5 (qui chargent certains de leurs assemblys à partir du répertoire 3.5). Selon votre interprétation du terme "chemin de répertoire .NET Framework", GetRuntimeDirectory peut ne pas être les informations que vous recherchez ("répertoire CLR" contre "répertoire d'où proviennent les assemblys 3.5").

177
Milan Gardian

Un moyen plus simple consiste à inclure l'assembly Microsoft.Build.Utilities et à utiliser

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

Vous pouvez le récupérer dans le registre 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);     
}

Source

2
CMS