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"
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").
Un moyen plus simple consiste à inclure l'assembly Microsoft.Build.Utilities et à utiliser
using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
TargetDotNetFrameworkVersion.VersionLatest);
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);
}