2010-12-15 113 views
9

Possible en double:
Determine framework (CLR) version of assemblyComment puis-je vérifier la version du .NET Framework à laquelle un fichier DLL a été compilé?

J'ai une bibliothèque/fichier DLL qui est compilé dans le .NET Framework.

Maintenant (sans aucun codage) Je voudrais vérifier la version .NET Framework qui a été utilisée pour compiler cette bibliothèque. J'ai besoin de savoir était 2.0, 3.5 ou 4.0. Y at-il un outil qui m'aide à atteindre cet objectif? (Je sais qu'il devrait être compilé sous la version 4.0 du Framework, mais je dois être sûr à 100% que la version 4.0 du Framework a été utilisée).

+0

La réponse liée n'est pas un vrai match. Version CLR! = Version du framework. @truth: votre question risque de se fermer, de republier et de signaler que le dup ne répond pas à votre question. –

+0

@Hans: Pourquoi republiez-vous? Il suffit de modifier la question ou le commentaire pour le signaler. Il sera rouvert s'il est fermé par erreur. – Cascabel

Répondre

13

Vous devez utiliser ILDASM. vous double-cliquez sur le manifeste et vous obtenez

// version des métadonnées: v2.0.50727

ou

// version des métadonnées: v4.0.30319

Framework 3.0 et 3.5 ne sont pas vraiment nouvelles versions du CLR, donc vous continuerez à avoir V2.0. Tout au plus, vous pouvez deviner de quel framework vous aurez besoin en vérifiant les dépendances. Certaines DLL sont disponibles uniquement en 3.5, mais si vous les copiez manuellement dans un PC 2.0 uniquement, l'application fonctionnera. Vérifiez C: \ windows \ Microsoft.NEt \ Framework et vous les trouverez dans leur dossier correspondant.

Espérons que cela aide

4

Utilisez ILDASM ou Reflector pour inspecter le manifeste d'assembly et consultez la version des ensembles System. * Référencés.

Par exemple, en utilisant ILDASM pour voir le manifeste d'un ensemble de .NET, je peux voir que cela a été construit cadre de ciblage 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

Vous devriez regarder TargetFrameworkAttribute - pas aux versions spécifiques des librairies système – Lu55

+0

@ Lu55, gardez à l'esprit que TargetFrameworkAttribute a seulement été introduit dans Framework 4.0 –

1

J'utiliser Reflection:

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

Mais, je suis un programmeur. Je ne sais pas comment déterminer ce genre de choses "sans codage".

+1

Tenté d'upvoter cette réponse pour cette dernière ligne seulement, bien que ce soit une réponse terrible. :) – Arafangion

9

Si vous l'avez comme référence dans un projet. Vous devriez être capable de regarder la version Runtime sous les propriétés de cette référence. Aucun codage requis = -)

alt text