Ich denke, das Beste, was Sie zuverlässig erreichen können, ist zu bestimmen, welche Version der CLR erforderlich ist. Sie können dies tun, indem Sie ILDASM verwenden und den Knoten "MANIFEST" oder Reflektor und die Zerlegungsansicht des Knotens "Application.exe" als IL betrachten. In beiden Fällen gibt es einen Kommentar, der die CLR-Version angibt. In ILDASM lautet der Kommentar "// Metadatenversion" und in Reflector "Ziellaufzeitversion".
Hier einige Beispiele für eine .NET WinForms-Anwendung mit dem Namen WindowsFormsApplication1.exe:
ILDASMUS:
// 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
Sie können auch die Liste der Assemblys anzeigen, auf die verwiesen wird, und nach der Referenz mit der höchsten Versionsnummer suchen.
Verwenden von ILDASM unter Berücksichtigung der Knotendaten "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
}
Verwenden Sie Reflector, um die Dissambly (immer noch als IL) für jede aufgelistete Referenz zu betrachten:
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
Indem Sie die Referenz mit den Metadaten der höchsten Version finden, können Sie bestimmen, von welcher Version des Frameworks diese Referenz stammt. Dies bedeutet, dass Sie dieselbe Version des Frameworks benötigen, die für die Ausführung der Anwendung installiert ist. Davon abgesehen würde ich dies nicht als 100% zuverlässig behandeln, aber ich denke nicht, dass sich dies bald ändern wird.