creo que lo más cerca que puede obtener de forma fiable es determinar qué versión del CLR se requiere. Puede hacerlo utilizando ILDASM y mirando el nodo "MANIFEST" o Reflector y mirando la vista de dissembly del nodo "Application.exe" como IL. En ambos casos, hay un comentario que indica la versión de CLR. En ILDASM, el comentario es "// Versión de metadatos" y en Reflector el comentario es "Versión de tiempo de ejecución de destino".
Éstos son ejemplos de una aplicación .NET WinForms llamado 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
}
reflector:
.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727
También puede mirar la lista de ensamblados de referencia y busque la referencia con el número de versión más alto.
de nuevo, usando ILDASM mirando a los datos del nodo "manifiesto":
.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
}
Y usando Reflector, mirando el dissambly (todavía como IL) para cada referencia en la lista:
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
Por Al buscar la referencia con los metadatos de la versión más alta, puede determinar de qué versión del Framework proviene esa referencia, lo que indicaría que necesita la misma versión del Framework instalado para que se ejecute la aplicación. Una vez dicho esto, no lo trataría como 100% confiable, pero no creo que vaya a cambiar pronto.
Véase también http://stackoverflow.com/questions/3460982/determine-net-framework- version-for-dll? tab = oldest # tab-top –