2010-12-15 2 views
9

Mögliche Duplizieren:
Determine framework (CLR) version of assemblyWie überprüfe ich die Version von .NET Framework, für die eine DLL-Datei kompiliert wurde?

ich eine Bibliothek/DLL-Datei, die in .NET Framework kompiliert wird.

Jetzt (ohne Codierung) möchte ich die .NET Framework-Version überprüfen, die zum Kompilieren dieser Bibliothek verwendet wurde. Ich muss wissen, war es 2,0, 3,5 oder 4,0. Gibt es ein Tool, das mir dabei hilft? (Ich weiß, dass es unter Version 4.0 des Framework kompiliert werden sollte, aber ich muss 100% sicher sein, dass Version 4.0 des Frameworks verwendet wurde).

+0

Die verknüpfte Antwort ist kein echtes Spiel. CLR-Version! = Framework-Version. @truth: Deine Frage wird wahrscheinlich geschlossen, repost und darauf hinweisen, dass der dup deine Frage nicht beantwortet. –

+0

@Hans: Warum würden Sie repost? Bearbeiten Sie einfach die Frage oder den Kommentar, um darauf hinzuweisen. Es wird wieder geöffnet, wenn es versehentlich geschlossen wird. – Cascabel

Antwort

13

Sie müssen ILDASM verwenden. verdoppeln Sie das Manifest klicken und Sie erhalten

// Metadaten Version: v2.0.50727

oder

// Metadaten Version: v4.0.30319

Framework 3.0 und 3.5 sind nicht wirklich Neuheiten von der CLR, also wirst du weiterhin V2.0 haben. Sie können höchstens erraten, welchen Rahmen Sie benötigen, indem Sie die Abhängigkeiten überprüfen. Einige DLLs sind nur in Version 3.5 verfügbar, aber wenn Sie sie manuell in einen PC mit nur 2.0-Code kopieren, funktioniert die App. Überprüfen Sie C: \ Windows \ Microsoft.NEt \ Framework und Sie finden sie in ihrem entsprechenden Ordner.

this helps

4

Verwenden Sie ILDASM oder Reflector, um das Assemblymanifest zu überprüfen und die Version der System. * - Assemblys anzuzeigen, auf die verwiesen wird.

Zum Beispiel ILDASM mit dem Manifest einer .NET-Assembly sehen Ich kann sehen, dass dieser Rahmen Targeting gebaut wurde 1,1

// Metadata version: v1.1.4322 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern System.Web 
{ 
    .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A)       // .?_....: 
    .ver 1:0:5000:0 
} 
.assembly extern System 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 1:0:5000:0 
} 
.assembly extern ICSharpCode.SharpZipLib 
{ 
    .publickeytoken = (1B 03 E6 AC F1 16 4F 73)       // ......Os 
    .ver 0:84:0:0 
} 
.assembly ReverseProxy 
{ 

    // --- The following custom attribute is added automatically, do not uncomment ------- 
    // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(bool, 
    //                    bool) = (01 00 00 01 00 00) 

    .hash algorithm 0x00008004 
    .ver 0:0:0:0 
} 
.module ReverseProxy.dll 
// MVID: {3F1B8B81-1B8F-4DD7-A71F-FD019C095F25} 
.imagebase 0x00400000 
.file alignment 0x00000200 
.stackreserve 0x00100000 
.subsystem 0x0003  // WINDOWS_CUI 
.corflags 0x00000001 // ILONLY 
// Image base: 0x010A0000 
+1

Sie sollten auf TargetFrameworkAttribute - nicht auf die spezifischen Versionen der System-Bibliotheken – Lu55

+0

@ Lu55, beachten Sie, dass TargetFrameworkAttribute wurde nur in Framework 4.0 –

1

ich Reflection verwenden würde:

Assembly a = Assembly.ReflectionOnlyLoadFrom("C:\\library.dll"); 
Console.WriteLine(a.ImageRuntimeVersion); 

Aber ich bin ein Programmierer. Ich weiß nicht, wie ich diese Art von Dingen "ohne irgendeine Kodierung" bestimmen kann.

+1

versucht versucht, diese Antwort für die letzte Zeile allein upvote, obwohl dies eine schreckliche Antwort ist. :) – Arafangion

9

Wenn Sie es als Referenz in einem Projekt. Sie sollten in der Lage sein, die Runtime-Version unter Eigenschaften für diese Referenz zu betrachten. Keine Codierung erforderlich = -)

alt text