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".
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".
Antworten:
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 dringend davon abraten, die Registrierung direkt zu lesen. Wenn eine .NET-Anwendung beispielsweise in 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: \" geladen werden Windows \ Microsoft.NET \ Framework \ v2.0.50727 "(x86-Kompilierungsziel). Wenn Sie die Registrierung lesen , erfahren Sie nicht , 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" ist. Dies bedeutet, dass der Aufruf von GetRuntimeDirectory () das Verzeichnis 2.0 auch in .NET 3.5-Anwendungen zurückgibt (die einige ihrer Assemblys aus dem 3.5-Verzeichnis laden). 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").
Eine einfachere Möglichkeit besteht darin, die Assembly und Verwendung von Microsoft.Build.Utilities einzuschließen
using Microsoft.Build.Utilities;
ToolLocationHelper.GetPathToDotNetFramework(
TargetDotNetFrameworkVersion.VersionLatest);
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);
}
Lesen Sie den Wert des Schlüssels [HKLM] \ Software \ Microsoft.NetFramework \ InstallRoot - Sie erhalten "C: \ WINDOWS \ Microsoft.NET \ Framework". Fügen Sie dann die gewünschte Framework-Version hinzu.