Je pense que le plus proche que vous pouvez obtenir de manière fiable est de déterminer quelle est la version de la CLR est nécessaire. Vous pouvez le faire en utilisant ILDASM et en regardant le "MANIFESTE" nœud ou un Réflecteur et en regardant la dissasembly vue de l' "Application.exe" le noeud que l'IL. Dans les deux cas, il y a un commentaire qui indique la version CLR. Dans ILDASM, le commentaire est "// Métadonnées version" et dans le Réflecteur, le commentaire est "Target Runtime Version".
Voici des exemples pour une .NET WinForms application nommée WindowsFormsApplication1.exe:
ILDASM:
// 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 recherchez la référence avec le plus haut numéro de version.
Encore une fois, à l'aide de ILDASM en regardant le "MANIFESTE" nœud de données:
.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 à l'aide de Réflecteur, en regardant les dissambly (encore qu'IL) pour chaque référence répertoriés:
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
Par trouver la référence avec la version la plus récente des métadonnées, vous pouvez déterminer quelle version du Cadre de référence est venu, ce qui pourrait indiquer que vous avez besoin de la version du Framework installé pour l'exécution de l'application. Cela étant dit, je ne voudrais pas traiter cela comme fiable à 100%, mais je ne pense pas que cela va changer bientôt.