Wie zu bestimmen, ob eine .NET-assembly erstellt wurde für x86 oder x64?
Habe ich eine beliebige Liste .NET-Assemblys.
Brauche ich, um programmgesteuert überprüfen Sie, ob jede DLL wurde gebaut für x86 (statt x64 oder Any CPU). Ist das möglich?
möglich, Duplikat der Wie kann ich bestimmen, für welche Plattform eine ausführbare Datei kompiliert wird?
Vielleicht wollen Sie auch heraus zu überprüfen dieses: check-if-unmanaged-dll-is-32-bit-or-64-bit.
In späteren version von CorFlags, entsprechend .NET 4.5, "32BIT" wurde ersetzt durch "32BITREQ" und "32BITPREF"..
Vielleicht wollen Sie auch heraus zu überprüfen dieses: check-if-unmanaged-dll-is-32-bit-or-64-bit.
In späteren version von CorFlags, entsprechend .NET 4.5, "32BIT" wurde ersetzt durch "32BITREQ" und "32BITPREF"..
InformationsquelleAutor Judah Gabriel Himango | 2008-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf
System.Reflection.AssemblyName.GetAssemblyName(string assemblyFile)
Können Sie prüfen, assembly-Metadaten aus den zurückgegebenen AssemblyName Beispiel:
Mit PowerShell:
Hier, ProcessorArchitecture identifiziert, die Ziel-Plattform.
Bin ich mit PowerShell in diesem Beispiel die Methode aufrufen kann.
Die ProcessorArchitecture Feld ist eine Aufzählung; im obigen Beispiel sind es die MSIL", das bedeutet " Neutral in Bezug auf Prozessor-und bit-pro-Wort." Andere Werte sind X86, IA64, Amd64. Siehe msdn.microsoft.com/en-us/library/... für weitere details.
Versuchen Sie, mit
[reflection.assemblyname]::GetAssemblyName("${pwd}\name.dll")
als manchmal ist der Prozess das aktuelle Verzeichnis ist nicht der gleiche wie der aktuelle provider (das ist, wo ich davon ausgehen, dass die DLL ist für Sie)Eine andere Einschränkung zu achten ist, zu vergessen "zulassen" in der DLL, wenn Sie heruntergeladen aus dem Internet. Verwenden unblock-Datei, oder Rechtsklick/Eigenschaften/entsperren aus dem explorer. Sie müssen neu starten, die shell für Sie zu erkennen, die entsperrt-status, wenn Sie bereits einmal versagt in der aktuellen Sitzung (die Schuld der internet explorer - ja, wirklich.)
In ASP.NET MVC-code, es ist ein Kommentar
// DevDiv 216459: This code originally used Assembly.GetName(), but that requires FileIOPermission, which isn't granted in medium trust. However, Assembly.FullName *is* accessible in medium trust.
Leider gibt es keine Möglichkeit, zu Lesen, ProcessorArchitecture ohne dieGetName instance method
; mitAssemblyName constructor
, das Feld ist immer eingestelltNone
.InformationsquelleAutor x0n
Können Sie die CorFlags CLI - tool (zum Beispiel, C:\Program Dateien\Microsoft SDKs\Windows\v7.0\Bin\CorFlags.exe), um zu bestimmen, den status einer Baugruppe, basierend auf seinen Ausgang und Eröffnung einer assembly als eine binäre Anlage, die Sie sollten in der Lage sein zu bestimmen, wo Sie benötigen, um zu bestimmen, ob die 32BIT-flag auf 1 gesetzt ist (x86) oder 0 (Jede CPU oder x64, je nach
PE
):Den blog-post x64-Entwicklung mit .NET hat einige Informationen über
corflags
.Sogar besser, können Sie verwenden Sie
- Modul.GetPEKind
, um zu bestimmen, ob eine assembly istPortableExecutableKinds
WertPE32Plus
(64-bit),Required32Bit
(32-bit und WOW), oderILOnly
(any CPU) zusammen mit anderen Parametern.GetPEKind kann in einer 64-bit-Prozess beim Check-32-bit-Assemblys
Sie müssen rufen Sie GetPEKind von 32bit Prozess
Ich installieren, VS 2008, VS 2010, VS 2012 und VS 2013. Ich habe 8 Dateien CorFlags.exe in Unterordnern C:\Program Files (x86)\Microsoft SDKs\Windows\. Welche sollte ich verwenden ?
Wie schon in Antwort, in .NET 4.5 gibt es 32BITREQ und 32BITPREF statt der 32-bit-flag. PE32/0/0 und PE32/0/1 AnyCPU und AnyCPU 32-bit bevorzugt, beziehungsweise.
InformationsquelleAutor cfeduke
Nur zur Klarstellung, CorFlags.exe ist Teil der .NET Framework SDK. Habe ich die Entwicklungstools auf meinem Rechner, und der einfachste Weg für mich festzustellen, ob eine DLL 32-bit-nur zu:
Öffnen Sie die Visual Studio-Eingabeaufforderung (In Windows: Menü Start/Programme/Microsoft Visual Studio/Visual Studio Tools/Visual Studio 2008-Eingabeaufforderung)
CD in das Verzeichnis, das die DLL in Frage
Laufen corflags wie diese:
corflags MyAssembly.dll
Erhalten Sie die Ausgabe so etwas wie dieses:
Als pro Kommentare die Fahnen oben sind, gelesen werden, als folgende:
Dies scheint zu haben, hat sich mittlerweile geändert; corflags zeigt nun
32BITREQ
und32BITPREF
sondern als eine einzige32BIT
Wert.Microsoft .NET 4.5 eingeführt eine neue option Beliebige CPU 32-bit Bevorzugt. Hier sind die details.
InformationsquelleAutor JoshL
Wie wärs, wenn du einfach schreiben, Sie eigene? Der Kern der PE-Architektur wurde noch nicht ernsthaft verändert seit Ihrer Einführung in Windows 95. Hier ist ein C# - Beispiel:
Nun die aktuellen Konstanten sind:
Aber mit dieser Methode, die es erlaubt, die Möglichkeiten von neuen Konstanten, validieren Sie einfach die zurück, wie Sie sehen, passen.
Sehr interessant, aber wenn ich eine kompilierte Anwendung mit Jeder CPU, das Ergebnis ist 0x10B. Das ist falsch, da meine Applikation läuft in einem x64-system. Gibt es irgendeine andere fahne zu überprüfen?
GetPEArchitecture Werke für Assemblys kompiliert mit .net 3.5, 4.0, 4.5 und 4.5.1 ? Anyways, ich denke, Modul.GetPEKind kann in einer 64-bit-Prozess beim Check-32-bit-Assemblys.
InformationsquelleAutor Jason
Versuchen, CorFlagsReader aus diesem Projekt auf CodePlex. Es hat keine Verweise zu anderen assemblies und es kann verwendet werden, wie Sie ist.
Der link funktioniert immer noch wie diese schreiben, aber wie CodePlex ist über abgeschaltet werden, wäre es gut zu tun, die entsprechende Maßnahmen ergreifen, bevor es zu spät ist.
InformationsquelleAutor Ludwo
InformationsquelleAutor Morgan Mellor
DotPeek von JetBrians bietet eine schnelle und einfache Möglichkeit, um zu sehen, msil(anycpu), x86, x64
InformationsquelleAutor Prabhakaran Rajagopal
Unten ist eine batch-Datei, die ausgeführt wird
corflags.exe
gegen alledlls
undexes
im aktuellen Verzeichnis und allen Unterverzeichnissen, analysiert die Ergebnisse und zeigt die Ziel-Architektur.Je nach der version von
corflags.exe
verwendet wird, die line-Elemente in der Ausgabe wird entweder32BIT
, oder32BITREQ
(und32BITPREF
). Je nachdem, welcher dieser zwei ist enthalten in der Ausgabe ist die kritische Linie Artikel, die geprüft werden müssen, zu unterscheiden zwischenAny CPU
undx86
. Wenn Sie eine ältere version voncorflags.exe
(pre Windows SDK v8.0A), dann wird nur die32BIT
werbebuchung wird in der gegenwärtigen Ausgabe, wie die anderen angegeben haben, in der Vergangenheit Antworten. Ansonsten32BITREQ
und32BITPREF
ersetzen.Diese übernimmt
corflags.exe
ist in der%PATH%
. Die einfachste Art, dies sicherzustellen, ist die Verwendung einesDeveloper Command Prompt
. Alternativ können Sie auch kopieren Sie es aus, es ist Standard-Speicherort.Wenn die batch-Datei weiter unten ausgeführt wird, gegen eine nicht verwaltete
dll
oderexe
, es wird falsch angezeigt, es alsx86
, da die tatsächliche Ausgabe vonCorflags.exe
wird eine Fehlermeldung ähnlich der folgenden:InformationsquelleAutor Eric Lease
Eine weitere Möglichkeit wäre die Verwendung von dumpbin aus der Visual Studio-tools auf DLL und suchen Sie den entsprechenden Ausgang
Hinweis: Oben o/p ist nur für 32-bit-dll
Eine weitere nützliche option mit dumpbin.exe ist /EXPORTS, wird Es zeigen Ihnen die Funktion wird von der dll
InformationsquelleAutor Ayush joshi
Habe ich geklont, ein super nützliches tool, das fügt ein Kontextmenü-Eintrag für Assemblys im windows-explorer, um alle verfügbaren info:
Hier herunterladen:
https://github.com/tebjan/AssemblyInformation/releases
InformationsquelleAutor thalm
Anderen Weg, um zu überprüfen das Ziel, die Plattform einer .NET-assembly wird mit der Inspektion der Baugruppe mit .NET Reflector...
@#~#€~! Ich habe gerade festgestellt, dass die neue version nicht kostenlos! So, die Korrektur, falls Sie eine Kostenlose version von .NET reflector, Sie können es verwenden, um überprüfen Sie die Ziel-Plattform.
InformationsquelleAutor juanjo.arana
cfeduke Hinweise auf die Möglichkeit der Berufung GetPEKind. Es ist potentiell interessant, dies zu tun aus der PowerShell.
Hier zum Beispiel der code für ein cmdlet an, die verwendet werden könnten: https://stackoverflow.com/a/16181743/64257
Alternativ auf https://stackoverflow.com/a/4719567/64257 es wird darauf hingewiesen, dass "es gibt auch die Get-PEHeader cmdlet in der PowerShell Community Extensions, die verwendet werden können, um test für ausführbare Bilder."
InformationsquelleAutor Chris
Eine erweiterte Anwendung für die, die Sie hier finden können: CodePlex - ApiChange
Beispiele:
InformationsquelleAutor Wernfried Domscheit
Allgemeinere Weise - verwenden Sie den Datei-Struktur, um zu bestimmen, Bitanzahl und Bild-Typ:
Zusammenstellung-Modus-enumeration
Quellcode mit Erklärung an GitHub
InformationsquelleAutor BlackGad