177 votes

Déterminer la version de .NET Framework pour la dll

J'ai une ancienne dll qui a été compilée avec le cadre .NET et déployée. Je ne suis pas sûr de la version du cadre .NET avec laquelle elle a été compilée. Je me demande comment je peux déterminer la version du cadre .NET avec laquelle cette dll a été compilée. Je ne peux pas me fier au code source car je pense qu'il a été mis à niveau vers Visual Studio 2008 et modifié pour la version 3.5 du cadre .NET.

4 votes

166voto

Swoogan Points 503

Dans PowerShell, vous pouvez utiliser ce qui suit pour obtenir le runtime cible :

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion

J'ai adapté cela à PowerShell à partir de La réponse de Ben Griswold .

Si vous voulez connaître la version du framework cible spécifié dans Visual Studio, utilisez :

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes |
Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } | 
Select-Object -ExpandProperty ConstructorArguments | 
Select-Object -ExpandProperty value

Vous devriez obtenir quelque chose comme

.NETFramework,Version=v4.5.2

4 votes

Cette réponse est la plus utile. Tous les systèmes d'exploitation Windows postérieurs à 2003 prennent en charge Powershell. Il s'agit d'un interpréteur de commandes qui fournit un retour d'information immédiat et qui ne nécessite pas de support d'application supplémentaire, comme le suggèrent les autres réponses. Idéal pour une vérification ponctuelle d'une dll. Vous êtes l'homme de la situation @swoogan.

2 votes

J'ai fait cela pour une DLL que j'ai construite avec une TargetFrameworkVersion de v3.5, et cela a donné v2.0.50727. Que me manque-t-il ?

6 votes

@BHSPitMonkey il n'y a eu que 4 versions de runtime : 1.0, 1.1, 2.0 et 4.0. .NET 3.0 et 3.5 compile à la version 2.0 du CLR. msdn.microsoft.com/fr/us/library/bb822049(v=vs.110).aspx

82voto

wal Points 7092

dotPeek est un excellent outil (gratuit) pour afficher ces informations.

Si vous avez quelques difficultés à vous procurer Reflector, voici une bonne alternative.

enter image description here

4 votes

Pour info, je suis passé de DotPeek à JustDecompile à cause d'un problème : si vous sélectionnez "specific version = false", DotPeek affiche une version vide, et JustDecompile affiche la version correcte. Cela valait la peine de changer pour moi.

0 votes

Super - a fait exactement ce que je voulais sans installer une version d'essai de Reflector.

54voto

Josh Stodola Points 42410

Vous pouvez utiliser ILDASM ...

ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil

et vérifiez la section "Métadonnées" dans le résultat. Ce serait quelque chose comme ceci :

Section de métadonnées : 0x424a5342, version : 1.1, extra : 0, version len : 12, version : v4.0.30319

La balise "version" vous indique la version de .NET Framework. Dans l'exemple ci-dessus, il s'agit de la version 4.0.30319.

3 votes

Que dois-je rechercher ici ? Est-ce que cela signifie .NET 4.0 ? // Metadata section: 0x424a5342, version: 1.1, extra: 0, version len: 12, versio n: v4.0.30319

0 votes

Oui, pour .NET 2, j'obtiens ce qui suit : // Section de métadonnées : 0x424a5342, version : 1.1, extra : 0, len version : 12, version : v2.0.50727

52voto

ParmesanCodice Points 3339

Chargez-la dans Réflecteur et voir ce qu'elle référence ?

par exemple :

enter image description here

1 votes

Mon idée aussi, mais connaissant reflector, il va probablement se plaindre, et lui donner une belle icône d'erreur non descriptive.

0 votes

@leppie Il ne devrait pas y avoir de problème, même si c'est .NET 1.1. Il suffit de modifier votre liste d'assemblages par défaut.

0 votes

Votre réponse est très utile, mais je vous conseille de ne pas vous y fier aveuglément -- hier j'ai passé trop de temps sur mon propre projet qui était prévu pour .Net 4.0, signalé par Reflector comme utilisant .Net 4.0.3, et requis pour utiliser .Net 4.5 par Windows :-) Je ne connais pas de méthode pour vérifier cela sur le projet autrement qu'avec les sources -- voir ici : stackoverflow.com/questions/13214503/

21voto

Ben Griswold Points 6949

Vous avez plusieurs possibilités : Pour l'obtenir de manière programmatique, à partir du code géré, utilisez Assembly.ImageRuntimeVersion :

Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion

Depuis la ligne de commande, à partir de la version 2.0, ildasm.exe l'affichera si vous double-cliquez sur "MANIFEST" et recherchez "Metadata version". Détermination de la version CLR d'une image

0 votes

Comment obtenir ImageRuntimeVersion pour CurrentAppDomain ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X