it-swarm.com.de

Abrufen des .NET Framework-Verzeichnispfads

Wie kann ich den .NET Framework-Verzeichnispfad in meiner C # -Anwendung abrufen?

Der Ordner, auf den ich verweise, lautet "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727".

69
Bruno Cartaxo

Der Pfad zum Installationsverzeichnis der für die aktuelle .NET-Anwendung aktiven CLR kann mithilfe der folgenden Methode abgerufen werden:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()

Ich würde stark davon abraten, die Registry direkt zu lesen. Wenn beispielsweise eine .NET-Anwendung auf 64-Bit-Systemen ausgeführt wird, kann die CLR entweder von "C:\Windows\Microsoft.NET\Framework64\v2.0.50727" (AnyCPU, x64-Kompilierungsziele) oder von "C:\Windows\Microsoft.NET\Framework\v2.0.50727 "(x86-Kompilierungsziel). Beim Lesen der Registrierung wird nicht angegeben, welches der beiden Verzeichnisse von der aktuellen CLR verwendet wurde.

Eine weitere wichtige Tatsache ist, dass "die aktuelle CLR" für .NET 2.0-, .NET 3.0- und .NET 3.5-Anwendungen "2.0" sein wird. Dies bedeutet, dass der Aufruf von GetRuntimeDirectory () auch in .NET 3.5-Anwendungen (die einige ihrer Assemblys aus dem 3.5-Verzeichnis laden) das Verzeichnis 2.0 zurückgibt. Abhängig von Ihrer Interpretation des Begriffs ".NET Framework-Verzeichnispfad" ist GetRuntimeDirectory möglicherweise nicht die gesuchte Information ("CLR-Verzeichnis" im Vergleich zu "Verzeichnis, aus dem 3.5-Assemblys stammen").

177
Milan Gardian

Eine einfachere Möglichkeit besteht darin, die Microsoft.Build.Utilities-Assembly einzuschließen und zu verwenden

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

Sie können es aus der Windows-Registrierung abrufen:

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);     
}

Quelle

2
CMS