Ich habe eine willkürliche Liste von .NET-Assemblies.
Ich muss programmatisch prüfen, ob jede DLL für x86 (im Gegensatz zu x64 oder Any CPU) erstellt wurde. Ist dies möglich?
Ich habe eine willkürliche Liste von .NET-Assemblies.
Ich muss programmatisch prüfen, ob jede DLL für x86 (im Gegensatz zu x64 oder Any CPU) erstellt wurde. Ist dies möglich?
Versuchen Sie, CorFlagsReader zu verwenden von diesem Projekt bei CodePlex . Sie enthält keine Verweise auf andere Baugruppen und kann so verwendet werden, wie sie ist.
[TestMethod]
public void EnsureKWLLibrariesAreAll64Bit()
{
var assemblies = Assembly.GetExecutingAssembly().GetReferencedAssemblies().Where(x => x.FullName.StartsWith("YourCommonProjectName")).ToArray();
foreach (var assembly in assemblies)
{
var myAssemblyName = AssemblyName.GetAssemblyName(assembly.FullName.Split(',')[0] + ".dll");
Assert.AreEqual(ProcessorArchitecture.MSIL, myAssemblyName.ProcessorArchitecture);
}
}
Nachfolgend finden Sie eine Batch-Datei, die Folgendes ausführt corflags.exe
gegen alle dlls
y exes
im aktuellen Arbeitsverzeichnis und allen Unterverzeichnissen, analysieren die Ergebnisse und zeigen die Zielarchitektur jedes einzelnen an.
Je nach Version von corflags.exe
verwendet wird, enthalten die Einzelposten in der Ausgabe entweder 32BIT
, または 32BITREQ
(und 32BITPREF
). Welches dieser beiden Elemente in der Ausgabe enthalten ist, ist der kritische Posten, der geprüft werden muss, um zu unterscheiden zwischen Any CPU
y x86
. Wenn Sie eine ältere Version von corflags.exe
(vor Windows SDK v8.0A), dann wird nur die 32BIT
Einzelposten in der Ausgabe vorhanden sein wird, wie andere in früheren Antworten angegeben haben. Andernfalls 32BITREQ
y 32BITPREF
ersetzen.
Dies setzt voraus corflags.exe
ist in der %PATH%
. Der einfachste Weg, dies zu gewährleisten, ist die Verwendung eines Developer Command Prompt
. Alternativ können Sie die Datei auch von ihrem Standardspeicherort .
Wenn die unten stehende Batch-Datei auf einem nicht verwalteten dll
o exe
wird es fälschlicherweise als x86
da die tatsächliche Leistung von Corflags.exe
wird eine Fehlermeldung ähnlich der folgenden erscheinen:
corflags : Fehler CF008 : Die angegebene Datei hat keinen gültigen verwalteten Header
@echo off
echo.
echo Target architecture for all exes and dlls:
echo.
REM For each exe and dll in this directory and all subdirectories...
for %%a in (.exe, .dll) do forfiles /s /m *%%a /c "cmd /c echo @relpath" > testfiles.txt
for /f %%b in (testfiles.txt) do (
REM Dump corflags results to a text file
corflags /nologo %%b > corflagsdeets.txt
REM Parse the corflags results to look for key markers
findstr /C:"PE32+">nul .\corflagsdeets.txt && (
REM `PE32+` indicates x64
echo %%~b = x64
) || (
REM pre-v8 Windows SDK listed only "32BIT" line item,
REM newer versions list "32BITREQ" and "32BITPREF" line items
findstr /C:"32BITREQ : 0">nul /C:"32BIT : 0" .\corflagsdeets.txt && (
REM `PE32` and NOT 32bit required indicates Any CPU
echo %%~b = Any CPU
) || (
REM `PE32` and 32bit required indicates x86
echo %%~b = x86
)
)
del corflagsdeets.txt
)
del testfiles.txt
echo.
Ich habe ein superpraktisches Tool geklont, das einen Kontextmenüeintrag für Assemblies im Windows-Explorer hinzufügt, um alle verfügbaren Informationen anzuzeigen:
Hier herunterladen: https://github.com/tebjan/AssemblyInformation/releases
Eine fortgeschrittene Anwendung dafür finden Sie hier: CodePlex - ApiChange
Beispiele:
C:\Downloads\ApiChange>ApiChange.exe -CorFlags c:\Windows\winhlp32.exe
File Name; Type; Size; Processor; IL Only; Signed
winhlp32.exe; Unmanaged; 296960; X86
C:\Downloads\ApiChange>ApiChange.exe -CorFlags c:\Windows\HelpPane.exe
File Name; Type; Size; Processor; IL Only; Signed
HelpPane.exe; Unmanaged; 733696; Amd64
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.