J'ai un fichier exécutable et j'aimerais savoir quelles versions du framework .NET ce fichier doit être démarré.
Existe-t-il un moyen facile de trouver ces informations quelque part?
(Jusqu'à présent, j'ai essayé ILDASM et DUMPBIN sans aucune chance.)
Réponses:
Je pense que le plus proche que vous pouvez obtenir de manière fiable est de déterminer quelle version du CLR est requise. Vous pouvez le faire en utilisant ILDASM et en regardant le nœud "MANIFEST" ou Reflector et en regardant la vue de désassemblage du nœud "Application.exe" comme IL. Dans les deux cas, un commentaire indique la version CLR. Dans ILDASM, le commentaire est "// Version des métadonnées" et dans Reflector, le commentaire est "Version d'exécution cible".
Voici des exemples pour une application .NET WinForms nommée WindowsFormsApplication1.exe:
ILDASME:
Réflecteur:
Vous pouvez également consulter la liste des assemblys référencés et rechercher la référence avec le numéro de version le plus élevé.
Encore une fois, en utilisant ILDASM en regardant les données du nœud "MANIFEST":
Et en utilisant Reflector, en regardant le dissambly (toujours comme IL) pour chaque référence répertoriée:
En recherchant la référence avec les métadonnées de version les plus élevées, vous pouvez déterminer de quelle version du Framework cette référence provient, ce qui indiquerait que vous avez besoin de la même version du Framework installée pour que l'application s'exécute. Cela étant dit, je ne traiterais pas cela comme 100% fiable, mais je ne pense pas que cela changera de si tôt.
la source
Utilisation du Bloc - notes , vieux de trois décennies, 200 Ko, outil préinstallé:
notepad appname.exe
,F3
jusqu'à ce que.NET Framework,version=vX.Y
s'affichev2.
... toujours 100 fois plus facile que d'installer des gigaoctets d'outils d'analyse de réseau de points et de garbage studios.Tout autre éditeur / visualiseur peut également ouvrir des binaires, comme Notepad ++ ou le grand visualiseur texte / hexadécimal de totalCommander .
la source
Une approche plus simplifiée consisterait à utiliser dotPeek et à voir ce qui apparaît dans l'arborescence.
Voir le panneau des propriétés:
la source
Vous pouvez maintenant utiliser ILSpy pour examiner la structure cible d'un assembly. Après avoir chargé l'assemblage, cliquez sur la racine du nœud d'assemblage, et vous pouvez trouver les informations sous la déclaration TargetFramework:
la source
À partir du code que vous pouvez utiliser,
Assembly.ImageRuntimeVersion
mais en regardant le fichier, la meilleure chose à faire serait probablement d'utiliser Reflector et de voir quelle version demscorlib
est référencée.Edit: Mieux vaut encore utiliser ildasm , ouvrir votre assembly, puis afficher le manifeste de l'assembly. La première ligne du manifeste vous indiquera la version exacte de CLR pour laquelle l'assembly a été créé.
la source
Vous pouvez utiliser un outil appelé CorFlags.exe. Il existe depuis .NET 2.0 et je sais avec certitude qu'il est inclus dans le SDK Windows 7.0. Par défaut (sous Windows XP Pro), il est installé dans C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ CorFlags.exe. Fournissez-lui le chemin du fichier vers un module géré (sans aucun autre indicateur de ligne de commande) pour afficher ses informations d'en-tête, qui incluent la version.
Gardez à l'esprit que cet utilitaire est conçu pour modifier l'en-tête PE32 d'un module, n'utilisez donc aucun des indicateurs avant d'avoir lu attentivement la documentation .
la source
Depuis la ligne de commande:
find "Framework" MyApp.exe
la source
Ou vous pouvez simplement découvrir quelle référence de System.Core il a. Cela vous indiquera la version .NET Framework que cette application utilise. Pour 2.0, la version de System.Core sera 2.0.xxx.xxx. Pour la version 3.5, la version sera 3.5.xxx.xxx, etc.
la source
Vous pouvez obtenir la version .NET d'un fichier sous Windows à l'aide de Powershell. Le script suivant;
fournit le résultat suivant;
Notez que le résultat a extrait la version .NET pour les fichiers exe dans ce dossier, mais il fera également de même pour une dll.
la source
Sous Linux / OSX / unix, vous pouvez utiliser:
la source