Ich habe eine ausführbare Datei und möchte wissen, welche Versionen des .NET Frameworks diese Datei gestartet werden muss.
Gibt es eine einfache Möglichkeit, diese Informationen irgendwo zu finden?
(Bisher habe ich ILDASM und DUMPBIN ohne Glück ausprobiert .)
.net
version
executable
Sam
quelle
quelle
Antworten:
Ich denke, das Beste, was Sie zuverlässig erreichen können, ist zu bestimmen, welche Version der CLR erforderlich ist. Sie können dies tun, indem Sie ILDASM verwenden und den Knoten "MANIFEST" oder Reflektor und die Zerlegungsansicht des Knotens "Application.exe" als IL betrachten. In beiden Fällen gibt es einen Kommentar, der die CLR-Version angibt. In ILDASM lautet der Kommentar "// Metadatenversion" und in Reflector "Ziellaufzeitversion".
Hier einige Beispiele für eine .NET WinForms-Anwendung mit dem Namen WindowsFormsApplication1.exe:
ILDASMUS:
Reflektor:
Sie können auch die Liste der Assemblys anzeigen, auf die verwiesen wird, und nach der Referenz mit der höchsten Versionsnummer suchen.
Verwenden von ILDASM unter Berücksichtigung der Knotendaten "MANIFEST":
Verwenden Sie Reflector, um die Dissambly (immer noch als IL) für jede aufgelistete Referenz zu betrachten:
Indem Sie die Referenz mit den Metadaten der höchsten Version finden, können Sie bestimmen, von welcher Version des Frameworks diese Referenz stammt. Dies bedeutet, dass Sie dieselbe Version des Frameworks benötigen, die für die Ausführung der Anwendung installiert ist. Davon abgesehen würde ich dies nicht als 100% zuverlässig behandeln, aber ich denke nicht, dass sich dies bald ändern wird.
quelle
Mit Notepad , drei Jahrzehnte alt, 200 KB groß, vorinstalliertes Tool:
notepad appname.exe
,F3
bis.NET Framework,version=vX.Y
angezeigt wirdv2.
... immer noch 100-mal einfacher als die Installation von Gigabyte Dot Net Analyzer-Tools und Garbage Studios.Jeder andere Editor / Viewer kann auch Binärdateien öffnen, wie z. B. Notepad ++ oder TotalCommanders großartiger Text- / Hex-Viewer- Lister .
quelle
Ein vereinfachterer Ansatz wäre, dotPeek zu verwenden und zu sehen, was im Baum angezeigt wird .
Siehe das Eigenschaftenfenster:
quelle
Mit ILSpy können Sie jetzt das Zielframework einer Assembly untersuchen. Klicken Sie nach dem Laden der Assembly auf das Stammverzeichnis des Assemblyknotens. Die Informationen finden Sie unter der TargetFramework-Deklaration:
quelle
Aus dem Code, den Sie verwenden können,
Assembly.ImageRuntimeVersion
aber wenn Sie sich die Datei ansehen,mscorlib
ist es wahrscheinlich am besten, den Reflektor zu verwenden und zu sehen, auf welche Version verwiesen wird.Bearbeiten: Noch besser wäre es, ildasm zu verwenden , Ihre Assembly zu öffnen und dann das Manifest für die Assembly anzuzeigen. In der ersten Zeile des Manifests wird die genaue Version der CLR angezeigt, für die die Assembly erstellt wurde.
quelle
Sie können ein Tool namens CorFlags.exe verwenden. Es gibt es seit .NET 2.0 und ich weiß mit Sicherheit, dass es im Windows SDK 7.0 enthalten ist. Standardmäßig (unter Windows XP Pro) wird es unter C: \ Programme \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exe installiert. Stellen Sie ihm den Dateipfad zu einem verwalteten Modul (ohne andere Befehlszeilenflags) zur Verfügung, um dessen Header-Informationen anzuzeigen, einschließlich der Version.
Beachten Sie, dass dieses Dienstprogramm den PE32-Header eines Moduls ändern soll. Verwenden Sie daher keine der Flags, bis Sie die Dokumentation sorgfältig gelesen haben .
quelle
Über die Befehlszeile:
find "Framework" MyApp.exe
quelle
Oder Sie können einfach herausfinden, welche Referenz von System.Core es hat. Hier erfahren Sie, welche .NET Framework-Version diese App verwendet. Für 2.0 lautet die Version von System.Core 2.0.xxx.xxx. Für 3.5 ist die Version 3.5.xxx.xxx usw.
quelle
Unter Linux / OSX / Unix können Sie Folgendes verwenden:
quelle
Sie können die .NET-Version einer Datei in Windows mit Powershell abrufen. Das folgende Skript;
liefert das folgende Ergebnis;
Beachten Sie, dass das Ergebnis die .NET-Version für die exe-Dateien in diesem Ordner extrahiert hat, dies jedoch auch für eine DLL.
quelle