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:
// Metadata version: v2.0.50727
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
Réflecteur:
.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727
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":
.assembly extern System.Drawing
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 2:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 3:5:0:0
}
Et en utilisant Reflector, en regardant le dissambly (toujours comme IL) pour chaque référence répertoriée:
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
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.