Frage

ich eine alte DLL habe, die gegen den .NET-Framework und bereitgestellt kompiliert wurde. Ich bin nicht sicher, welche Version des .NET-Framework es gegen kompiliert wurde. Ich frage mich, wie ich das schon gegen kompiliert wurde, welche Version des .NET-Framework bestimmen kann? Ich kann nicht den Quellcode vertrauen, weil ich es wurde ein Upgrade auf Visual Studio 2008 und geändert .NET Framework-Version 3.5.

glauben
War es hilfreich?

Lösung

Legen Sie es in Reflector und sehen, was es Referenzen?

Beispiel:

eingeben Bild Beschreibung hier

Andere Tipps

In Powershell können Sie mit dem Anschluss an die Ziellaufzeit zu erhalten:

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

I angepasst, dies zu Powershell von Ben Griswold Antwort .

Wenn Sie das Ziel Framework-Version in Visual Studio angegeben wissen, zu verwenden:

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

Sie sollten so etwas wie

erhalten
  

.NETFramework, = Version V4.5.2

dotPeek ist ein großes (kostenlos) Tool, um diese Informationen anzuzeigen.

Wenn Sie ein paar Probleme haben von Reflector habhaft dann ist dies eine gute Alternative.

eingeben Bild Beschreibung hier

Sie können mit ILDASM .. .

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

und die Prüfung für den ‚Metadaten Abschnitt‘ in der Ausgabe. Es wäre so etwas wie dies:

  

Metadaten Abschnitt: 0x424a5342, Version: 1.1, extra: 0, Version len:   12, Version: v4.0.30319

Die 'Version' Tag wird Ihnen Version des .NET Framework sagen. Im obigen Beispiel ist es 4.0.30319

Sie haben ein paar Optionen: Um es programmatisch zu erhalten, aus verwaltetem Code, Verwendung Assembly.ImageRuntimeVersion:

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

Von der Befehlszeile in v2.0 startet, wird ildasm.exe es zeigt, wenn Sie einen Doppelklick auf „manifest“ und sucht „Metadaten-Version“. Bestimmung eines CLR Version des Bildes

Verwenden ILSpy http://ilspy.net/

Open Source, kostenlos, auf jeden Fall eine Option, da jetzt Reflektor gezahlt wird.

Einfach nur

var tar = (TargetFrameworkAttribute)Assembly
          .LoadFrom("yoursAssembly.dll")
          .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();

Eine weitere Option über Visual Studio, einen Verweis auf die DLL zu jedem Projekt hinzufügen, dann mit der rechten Maustaste auf die neue Referenz und klicken Sie auf Eigenschaften, können Sie sehen, was Sie suchen in der Runtime-Version:

Decompile es mit ILDASM und Blick auf die Version von mscorlib, auf die verwiesen wird (sollte so ziemlich ganz oben sein).

Wenn Sie DotPeek von JetBrains haben, können Sie es in Assembly Explorer sehen.

Die Erweiterung auf den Antworten hier können diese sprengen, wenn es eine abhängige Assembly ist. Wenn Sie Glück haben und Sie wissen, wo die abhängig ist (oder sogar mehr Glück, es ist im GAC), dann kann dies dazu beitragen, ...

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

Referenz: https: // Weblog .west-wind.com / posts / 2006 / Dec / 22 / Reflection-on-Problem-Baugruppen

Ich schrieb schnell diese C # Konsole app, dies zu tun:

https://github.com/stuartjsmith/binarydetailer

Sie einfach ein Verzeichnis als Parameter übergeben, und es wird sein Bestes tun, Sie im Netz Rahmen für jede DLL zu erzählen und exe drin

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top