Déterminer la version .NET Framework pour dll
-
27-09-2019 - |
Question
J'ai un vieux dll qui a été compilé avec le framework .NET et déployé. Je ne sais pas quelle version du framework .NET, il a été compilé. Je me demande comment je peux déterminer quelle version du framework .NET cette dll a été compilé? Je ne peux pas faire confiance au code source parce que je crois qu'il a été mis à niveau vers Visual Studio 2008 et a changé à la version du framework .NET 3.5.
La solution
Autres conseils
Dans PowerShell, vous pouvez utiliser ce qui suit pour obtenir le temps d'exécution cible:
$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion
Je me suis adapté à ce PowerShell de Ben réponse de 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
dotPeek est un excellent outil (gratuit) pour afficher ces informations.
Si vous rencontrez quelques problèmes pour trouver la main sur réflecteur alors c'est une bonne alternative.
Vous pouvez utiliser ILDASM .. .
ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil
et la vérification de la « section de métadonnées » dans la sortie. Ce serait quelque chose comme ceci:
Section des métadonnées: 0x424a5342 version: 1.1, en sus: 0, la version len: 12, version: v4.0.30319
La balise 'version' vous dira la version .NET Framework. Dans l'exemple ci-dessus, il est 4.0.30319
Vous avez quelques options: Pour l'obtenir par programmation, à partir du code managé, utilisez Assembly.ImageRuntimeVersion:
Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion
A partir de la ligne de commande, à partir de v2.0, ildasm.exe montrera si vous double-cliquez sur « MANIFESTE » et recherchez « version des métadonnées ». Détermination de la version CLR une image
Utilisez ILSpy http://ilspy.net/
open source, libre, certainement une option, car maintenant réflecteur est payé.
Il suffit simplement
var tar = (TargetFrameworkAttribute)Assembly
.LoadFrom("yoursAssembly.dll")
.GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
décompiler avec ILDASM, et regardez la version de mscorlib qui est référencée (devrait être à peu près tout en haut).
L'expansion des réponses ici, cela peut exploser s'il y a un ensemble dépendant. Si vous êtes chanceux et vous savez où la personne à charge est (ou encore plus de chance, il est dans le GAC) cela peut aider ...
using System.Reflection;
using System.Runtime.Versioning;
// ...
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
var asm = System.Reflection.Assembly.LoadFrom(@"C:\Codez\My.dll");
var targetFrameAttribute = asm.GetCustomAttributes(true).OfType<TargetFrameworkAttribute>().FirstOrDefault();
targetFrameAttribute.Dump();
}
Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
var name = args.Name;
if (name.StartsWith("Depends"))
return System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"C:\Codez\Depends.dll");
return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}
Référence: https: // blog .west-wind.com / messages / 2006 / Dec / 22 / réflexion sur-problème-ensembles
Je me suis vite écrit cette application C # console pour faire ceci:
https://github.com/stuartjsmith/binarydetailer
Il suffit de passer un répertoire en tant que paramètre et il fera de son mieux pour vous dire le cadre net pour chaque dll et exe là