Bestimmen Sie .NET Framework Version für dll
-
27-09-2019 - |
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.
glaubenLösung
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.
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();
Decompile es mit ILDASM und Blick auf die Version von mscorlib, auf die verwiesen wird (sollte so ziemlich ganz oben sein).
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