Saya pikir yang paling dekat yang bisa Anda dapatkan dengan andal adalah menentukan versi CLR apa yang diperlukan. Anda dapat melakukan ini dengan menggunakan ILDASM dan melihat node "MANIFEST" atau Reflector dan melihat tampilan pembongkaran dari node "Application.exe" sebagai IL. Dalam kedua kasus tersebut ada komentar yang menunjukkan versi CLR. Dalam ILDASM, komentarnya adalah "// Metadata version" dan di Reflector komentarnya adalah "Target Runtime Version".
Berikut adalah contoh untuk aplikasi .NET WinForms bernama 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
}
Reflektor:
.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727
Anda juga dapat melihat daftar rakitan yang direferensikan dan mencari referensi dengan nomor versi tertinggi.
Sekali lagi, menggunakan ILDASM dengan melihat data node "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
}
Dan menggunakan Reflector, melihat dissambly (masih sebagai IL) untuk setiap referensi yang tercantum:
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
Dengan mencari referensi dengan metadata versi tertinggi, Anda dapat menentukan versi Framework mana referensi tersebut berasal, yang akan menunjukkan bahwa Anda memerlukan versi Framework yang sama yang diinstal agar aplikasi dapat berjalan. Karena itu, saya tidak akan menganggap ini 100% dapat diandalkan, tetapi saya tidak berpikir itu akan berubah dalam waktu dekat.