Das Problem ist, dass ich wissen muss, ob es Version 3.5 SP 1 ist. Environment.Version()
nur Rückkehr2.0.50727.3053
.
Ich habe diese Lösung gefunden , aber ich denke, es wird viel länger dauern, als es wert ist. Deshalb suche ich nach einer einfacheren. Ist es möglich?
Environment.Version()
wahrscheinlich nur die Version der CLR zurück.2.0
auch wenn es läuft mit3.5
Antworten:
So etwas sollte es tun. Holen Sie sich einfach den Wert aus der Registrierung
Für .NET 1-4 :
Framework
ist die am höchsten installierte Version,SP
ist das Service Pack für diese Version.Für .NET 4.5+ (aus der offiziellen Dokumentation ):
quelle
if (true)
Prüfung? Warum nicht einfach anrufenConsole.WriteLine()
?Nicht sicher , warum niemand nach den vorgeschlagenen offiziellen Empfehlungen von Microsoft direkt hier .
Dies ist der Code, den sie empfehlen. Sicher ist es hässlich, aber es funktioniert.
Für .NET 1-4
Für .NET 4.5 und höher
quelle
updates
für NET Framework 4.7 und NET Framework 4.7.1 ? Nicht 4.7 oder höher. Ja, 4.7 oder 4.7.1.Eine alternative Methode, bei der kein Zugriffsrecht auf die Registrierung erforderlich ist, besteht darin, das Vorhandensein von Klassen zu überprüfen, die in bestimmten Framework-Updates eingeführt werden.
quelle
Environment.Version()
gibt die richtige Antwort auf eine andere Frage. Dieselbe Version der CLR wird in .NET 2.0, 3 und 3.5 verwendet. Ich nehme an, Sie könnten das GAC auf Bibliotheken überprüfen, die in jeder dieser nachfolgenden Versionen hinzugefügt wurden.quelle
2.0
auch wenn es läuft mit3.5
Früher war es einfach, aber Microsoft entschied sich für eine grundlegende Änderung: Vor Version 4.5 befand sich jede Version von .NET in einem eigenen Verzeichnis
C:\Windows\Microsoft.NET\Framework
(Unterverzeichnissev1.0.3705, v1.1.4322, v2.0.50727, v3.0, v3.5
undv4.0.30319
).Seit Version 4.5 wurde dies geändert: Jede Version von .NET (dh 4.5.x, 4.6.x, 4.7.x, 4.8.x, ...) wird im selben Unterverzeichnis installiert,
v4.0.30319
sodass Sie dies nicht mehr können Überprüfen Sie die installierte .NET-Version, indem Sie nachsehenMicrosoft.NET\Framework
.Um die .NET-Version zu überprüfen, hat Microsoft abhängig von der zu überprüfenden .NET-Version zwei verschiedene Beispielskripte bereitgestellt , aber ich mag es nicht, zwei verschiedene C # -Skripte dafür zu haben. Also habe ich versucht, sie zu einem zu kombinieren. Hier ist das Skript, das
GetDotNetVersion.cs
ich erstellt (und für das 4.7.1-Framework aktualisiert) habe:Auf meinem Computer wird Folgendes ausgegeben:
Das einzige, was im Laufe der Zeit beibehalten werden muss, ist die Build-Nummer, sobald eine .NET-Version größer als 4.7.1 herauskommt. Dies kann einfach durch Ändern der Funktion erfolgen
CheckFor45PlusVersion
. Sie müssen dann den Release-Schlüssel für die neue Version kennen kann es hinzufügen. Beispielsweise:Dieser Release-Schlüssel ist immer noch der neueste und gilt für das Fall Creators-Update von Windows 10. Wenn Sie noch andere (ältere) Windows-Versionen ausführen, gibt es einen anderen gemäß dieser Dokumentation von Microsoft:
Wenn Sie das auch brauchen, müssen Sie hinzufügen
an die Spitze der Funktion
CheckFor45PlusVersion
. Ebenso funktioniert es für neuere Versionen. Zum Beispiel habe ich kürzlich den Scheck für 4.8 hinzugefügt. Sie finden diese Build-Nummern normalerweise bei Microsoft.Hinweis: Sie müssen Visual Studio nicht installieren, nicht einmal PowerShell. Sie können damit
csc.exe
das oben beschriebene Skript kompilieren und ausführen habe.Update: Die Frage bezieht sich auf .NET Framework. Der Vollständigkeit halber möchte ich erwähnen, wie auch die Version von .NET Core abgefragt werden kann. Im Vergleich zu den oben genannten ist dies einfach: Öffnen Sie eine Befehlsshell und geben Sie Folgendes ein:
Außerdem werden die .NET Core-Versionsnummer, die Windows-Version und die Versionen jeder zugehörigen Laufzeit-DLL aufgelistet. Beispielausgabe:
Beachten Sie das
Wenn Sie nur die Versionsnummer ohne alle zusätzlichen Informationen benötigen, können Sie verwenden
dotnet --version
.Auf einem 64-Bit-Windows-PC ist es möglich, die x86- Version neben der x64- Version von .NET Core zu installieren . In diesem Fall erhalten Sie nur die Version, die in der Umgebungsvariablen an erster Stelle steht
PATH
. Dies ist besonders wichtig, wenn Sie es auf dem neuesten Stand halten und jede Version kennenlernen möchten. Verwenden Sie zum Abfragen beider Versionen:Im obigen Beispiel sind beide gleich, aber wenn Sie vergessen haben, beide Instanzen zu aktualisieren, erhalten Sie möglicherweise unterschiedliche Ergebnisse! Beachten Sie, dass dies
Program Files
für die 64-Bit- Version undProgram Files (x86)
die 32-Bit- Version gilt.Update: Wenn Sie die Build-Nummern lieber in einer Liste als in einer Kaskade von if-Anweisungen aufbewahren möchten (wie von Microsoft vorgeschlagen), können Sie diesen Code
CheckFor45PlusVersion
stattdessen verwenden für :quelle
AFAIK Es gibt keine eingebaute Methode im Framework, mit der Sie dies tun können. Sie können diesen Beitrag auf einen Vorschlag zum Bestimmen der Framework-Version überprüfen, indem Sie die Windows-Registrierungswerte lesen.
quelle
Mit dieser Klasse kann Ihre Anwendung eine ordnungsgemäße Benachrichtigungsnachricht ausgeben, anstatt abzustürzen und zu brennen, wenn die richtige .NET-Version nicht gefunden werden konnte. Alles was Sie tun müssen, ist dies in Ihrem Hauptcode:
Standardmäßig dauert es 4.5.2, aber Sie können die Klasse nach Ihren Wünschen anpassen (Sie können MessageBox auch durch Console ersetzen):
Aktualisiert für 4.8:
Leicht erweiterbar, wenn später eine neue Version hinzugefügt wird. Ich habe mich vor 4.5 um nichts gekümmert, aber Sie haben die Idee.
quelle
4.7.1
, wurde die Revisionsnummer von docs.microsoft.com/en-us/dotnet/framework/migration-guide/…IsCompatible()
- Kompatibilität ist wahrscheinlich der häufigste Grund für die Abfrage der .Net-Version von allen.quelle
Ich hatte eine Situation, in der meine .NET 4.0-Klassenbibliothek möglicherweise von Assemblys einer .NET 4.0-Version oder einer höheren Version aufgerufen wurde.
Ein bestimmter Methodenaufruf würde nur funktionieren, wenn er von einer Assembly ab 4.5 ausgeführt wird.
Um zu entscheiden, ob ich die Methode aufrufen soll oder nicht, musste ich die aktuell ausgeführte Framework-Version ermitteln, und dies ist eine ziemlich gute Lösung dafür
quelle
Vielen Dank für diesen Beitrag, der sehr nützlich war. Ich musste es ein wenig optimieren, um nach Framework 2.0 zu suchen, da der Registrierungsschlüssel nicht sofort in ein Double konvertiert werden kann. Hier ist der Code:
quelle
mit der Klasse DA.VersionNetFramework
Ergebnis:
Aktuelle Betriebssysteminformationen: Computername: D1 Plattform: Win32NT Microsoft Windows NT 6.2.9200.0
Informationen zur .NET Framework-Umgebung: Environment.Version 4.0.30319.42000 .NET 4.6 unter Windows 8.1 64-Bit oder höher
.NET Framework-Informationen aus der Registrierung: v2.0.50727 2.0.50727.4927 SP2 v3.0 3.0.30729.4926 SP2 v3.5 3.5.30729.4926 SP1
v4
Client 4.6.00079 Voll 4.6.00079 v4.0
Client 4.0.0.0
.NET Framework 4.5 oder höher Informationen aus der Registrierung: Version: 4.6, installiert mit Windows 10 oder höher
Aktualisierungsverlauf Microsoft .NET Framework 4-Clientprofil
KB2468871
KB2468871v2
KB2478063
KB2533523
KB2544514
KB2600211
KB2600217
Microsoft .NET Framework 4 Erweitert
KB2468871
KB2468871v2
KB2478063
KB2533523
KB2544514
KB2600211
KB2600217
Microsoft .NET Pack 4 Multi-
Target
quelle
Ich habe Matts Klasse geändert, damit sie in jedem Projekt wiederverwendet werden kann, ohne alle Überprüfungen auf der Konsole zu drucken und eine einfache Zeichenfolge mit der korrekten installierten Maximalversion zurückzugeben.
quelle
Ich habe versucht, alle Antworten zu einem Ganzen zusammenzufassen.
Verwenden von:
NetFrameworkUtilities.GetVersion()
gibt die aktuell verfügbare Version von .NET Framework zu diesem Zeitpunkt zurück oder null, wenn sie nicht vorhanden ist.Dieses Beispiel funktioniert in .NET Framework-Versionen 3.5+. Es sind keine Administratorrechte erforderlich.
Ich möchte darauf hinweisen, dass Sie die Version mit den Operatoren <und> wie folgt überprüfen können:
Code:
quelle
Update mit .NET 4.6.2. Überprüfen Sie den Freigabewert in derselben Registrierung wie in den vorherigen Antworten:
quelle
updates
für NET Framework 4.7 und NET Framework 4.7.1 ?Wenig groß, sieht aber nach Microsoft-Kuriositäten aus:
quelle
Ab Version 4.5 hat Microsoft die Art und Weise geändert, in der der .NET Framework-Indikator in der Registrierung gespeichert wird. Eine offizielle Anleitung zum Abrufen des .NET Frameworks und der CLR-Versionen finden Sie hier: https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx
Ich füge eine modifizierte Version ihres Codes hinzu, um die Kopfgeldfrage zu beantworten, wie Sie das .NET Framework für 4.5 und höher hier bestimmen:
quelle
updates
für NET Framework 4.7 und NET Framework 4.7.1 ?Dies ist die Lösung, auf die ich gelandet bin:
quelle
quelle
updates
für NET Framework 4.7 und NET Framework 4.7.1 ?Wenn Ihr Rechner mit dem Internet verbunden ist, geht auf smallestdotnet , das Herunterladen und Ausführen von .NET Checker ist wahrscheinlich der einfachste Weg.
Wenn Sie die eigentliche Methode benötigen, um die Version zu bestimmen, schauen Sie sich die Quelle auf Github an, insb. die Constants.cs, die Ihnen für .net 4.5 und höher helfen, wobei der Revisionsteil der relevante ist:
quelle
updates
für NET Framework 4.7 und NET Framework 4.7.1 ?Ich finde es einfacher, mit der
Version
Klasse zu arbeiten:(Code ist C # 8)
quelle
"Release"
Werten zuVersion
s durch. Ich denke, der entscheidende Punkt, wo diese Informationen in der Registrierung gespeichert sind und in welchem Format, ist hier gut dokumentiert. ob das dem Anrufer als dargestellt iststring
,int
,enum
, oderVersion
ist alles nur darum , eine andere Verpackung auf die gleiche Sache.var v=RuntimeInformationEx .GetDotnetFrameworkVersion(); if (v<new Version(4,8,0) ...
Probier diese:
quelle
2.0
auch wenn es läuft mit3.5
RuntimeEnvironment.GetSystemVersion()
scheint die CLR-Version zurückzugeben, nicht die .NET-Version. MSDN Seite