2010-12-15 15 views
9

Powiel możliwe:
Determine framework (CLR) version of assemblyJak sprawdzić wersję architektury .NET Framework, z którą skompilowano plik DLL?

mam/plik biblioteki DLL, która jest skompilowany w .NET Framework.

Teraz (bez żadnego kodowania) Chciałbym sprawdzić wersję .NET Framework , która została użyta do kompilacji tej biblioteki. Muszę wiedzieć, że to 2.0, 3.5 lub 4.0. Czy jest jakieś narzędzie, które pomoże mi to osiągnąć? (Wiem, że powinien on być skompilowany w wersji 4.0 Framework, ale muszę być w 100% pewny, że wersja 4.0 Framework została użyta).

+0

prowadzi link Odpowiedź nie jest prawdziwy mecz. Wersja CLR! = Wersja szkieletowa. @truth: twoje pytanie prawdopodobnie się zamknie, odświeżysz i wskażesz, że dup nie odpowiada na twoje pytanie. –

+0

@Hans: Dlaczego chcesz repost? Po prostu edytuj pytanie lub komentarz, aby to zaznaczyć. Zostanie ponownie otwarty, jeśli zostanie omyłkowo zamknięty. – Cascabel

Odpowiedz

13

Musisz użyć ILDASM. dwukrotnym kliknięciu manifest i masz

// Metadane wersja: v2.0.50727

lub

wersja

// Metadane: v4.0.30319

Framework 3.0 i 3.5 nie są naprawdę nowe wersje z CLR, więc będziesz mieć V2.0. Co najwyżej możesz odgadnąć, jakiego szkieletu potrzebujesz, niwecząc zależności. Niektóre biblioteki dll są dostępne tylko w wersji 3.5, ale jeśli ręcznie je skopiujesz na komputerze z obsługą tylko 2.0, aplikacja będzie działać. Zaznacz C: \ windows \ Microsoft.NEt \ Framework, a znajdziesz je w odpowiednim folderze.

Mam nadzieję, że to pomoże

4

Użyj obiektu ILDASM lub , aby obejrzeć manifest zespołu i zobaczyć wersję zestawów System. *, Do których się odwołano.

Na przykład, używając ILDASM aby manifeście NET widzę, że ten został zbudowany kierowania Framework 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

Powinieneś spojrzeć na TargetFrameworkAttribute - nie w konkretnych wersjach systemu libs – Lu55

+0

@ Lu55, należy pamiętać, że TargetFrameworkAttribute został wprowadzony tylko w Framework 4.0 –

1

użyłbym Reflection:

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

Ale ja jestem programistą. Nie wiem, jak określić tego typu rzeczy "bez żadnego kodowania".

+1

Kuszony, aby upowszechnic tę odpowiedź tylko dla tego ostatniego wiersza, chociaż jest to straszna odpowiedź. :) – Arafangion

9

Jeśli masz go jako odniesienie w projekcie. Powinieneś być w stanie spojrzeć na wersję Runtime pod właściwościami dla tego odniesienia. Nie wymaga kodowania = -)

alt text

Powiązane problemy