2010-12-15 18 views
9

Duplicar posibles:
Determine framework (CLR) version of assembly¿Cómo compruebo la versión de .NET Framework sobre la que se compiló un archivo DLL?

Tengo un archivo/biblioteca DLL que se compila en el .NET Framework.

Ahora (sin ningún tipo de codificación) Me gustaría consultar la .NET Framework versión que se utilizó para compilar esta biblioteca. Necesito saber si era 2.0, 3.5 o 4.0. ¿Hay alguna herramienta que me ayude a lograr esto? (Sé que debe compilarse en la versión 4.0 del Framework, pero necesito estar 100% seguro de que se usó la versión 4.0 del Framework).

+0

La respuesta vinculada no es un partido real. Versión CLR! = Versión de framework. @truth: es probable que su pregunta se cierre, vuelva a publicar y señale que el dup no responde su pregunta. –

+0

@Hans: ¿Por qué volvería a publicar? Solo edite la pregunta o comentario para señalarlo. Se volverá a abrir si se cierra por error. – Cascabel

Respuesta

13

Debe usar ILDASM. hace doble clic en el manifiesto y se obtiene

// Metadatos versión: v2.0.50727

o

versión

// Metadatos: v4.0.30319

Framework 3.0 y 3.5 no son realmente nuevos lanzamientos del CLR, entonces seguirás teniendo V2.0. A lo sumo, puede adivinar qué marco necesitará al revisar las dependencias. Algunos dlls están disponibles solo en 3.5, pero si los copias manualmente en una PC solo 2.0, la aplicación funcionará. Compruebe C: \ windows \ Microsoft.NEt \ Framework y los encontrará en su carpeta correspondiente.

Espero que esto ayude

4

Utilice ILDASM o Reflector para inspeccionar el manifiesto de conjunto y ver la versión del sistema. * Ensamblados que se referenciaron.

Por ejemplo, el uso de ILDASM para ver el manifiesto de un ensamblado de .NET puedo ver que esto fue construido marco de metas de 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

Debería mirar TargetFrameworkAttribute - no en las versiones específicas de las libs del sistema – Lu55

+0

@ Lu55, tenga en cuenta que TargetFrameworkAttribute solo se introdujo en Framework 4.0 –

1

me gustaría utilizar Reflection:

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

Pero, soy un programador. No sé cómo determinar este tipo de cosas "sin ninguna codificación".

+1

. Tentado a votar esta respuesta solo por la última línea, aunque esta es una respuesta terrible. :) – Arafangion

9

Si lo tiene como referencia en un proyecto. Debería poder mirar la versión Runtime bajo propiedades para esa referencia. Sin necesidad de codificación = -)

alt text

Cuestiones relacionadas