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.

Était-ce utile?

La solution

Charger dans réflecteur et voir ce qu'il références?

par exemple:

entrer image description ici

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.

entrer image description ici

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();

Une autre option via Visual Studio, ajouter une référence à la DLL à tout projet, puis un clic droit sur la nouvelle référence et cliquez sur Propriétés, vous pouvez voir ce que vous recherchez dans la version Runtime:

décompiler avec ILDASM, et regardez la version de mscorlib qui est référencée (devrait être à peu près tout en haut).

Si vous avez DotPeek de JetBrains, vous pouvez le voir dans Assembly Explorer.

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à

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top