2013-09-04 19 views

Odpowiedz

18

Otwórz Visual Prompt Studio Command (w systemie Windows: menu Start/Programy/Microsoft Visual
Studio/Visual Studio Tools/Visual Studio 2010 Command Prompt)

CD do katalogu zawierającego DLL w pytanie

Run corflags takie jak ten:

corflags MyAssembly.dll 

wyjście wygląda następująco:

Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1 

Copyright (c) Microsoft Corporation. All rights reserved. 

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 1 
ILONLY : 1 
32BIT  : 0 
Signed : 0 

Interpretacja flagi:

Any CPU: PE = PE32 and 32BIT = 0 

x86: PE = PE32 and 32BIT = 1 

64-bit: PE = PE32+ and 32BIT = 0 
+7

Odpowiedź na http://stackoverflow.com/a/23614024/3923734 jest bardziej aktualna niż ta. – user145400

+2

Chociaż technicznie poprawny na czas .... odpowiedź poniżej dla .NET 4.5 jest bardziej dokładne/aktualne. –

+0

Jako kompilacja "Any CPU", wyjście Corflags jest dla mnie dziwne PE: PE32 + | 32BIT: 0. jest to możliwe? –

7

Można również skorzystać z tej tabeli:

 
    CPU | PE | 32BIT 
    ----------|-------|------ 
    x86  | PE32 | 1 
    Any CPU | PE32 | 0 
    x64  | PE32+ | 0 
+1

Również w * [Jak ustalić, czy zestaw .NET został zbudowany dla x86 lub x64?] (Http://stackoverflow.com/questions/270531/how-to-determine-if-a-net-assembly-was- built-for-x86-or-x64/270545 # 270545) * –

62

Microsoft .NET 4.5wprowadził nową opcję, Każdy procesor 32-bitowy Preferowany. W nowej wersji CorFlags.exe, flaga 32BIT już nie istnieje, zamiast tego dodano dwie nowe flagi, 32BITREQ i 32BITPREF.

Gdzieś na podstawie poniższego wyjaśnienia, możemy interpretować nowe CorFlags w następujący sposób.

CPU Architecture   PE  32BITREQ 32BITPREF 
------------------------ ----- -------- --------- 
x86 (32-bit)    PE32   1   0 
x64 (64-bit)    PE32+   0   0 
Any CPU     PE32   0   0 
Any CPU 32-Bit Preferred PE32   0   1 

Flagi wyświetlane przez CorFlags.exe znajdującej się C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Narzędzia

Version : Assembly's target framework. 
Header : 2.0/2.5 (Must have version of 2.5 or greater to run natively) 
PE  : PE32 (32-bit)/PE32+ (64-bit) 
CorFlags : Hexadecimal value, computed based on below 4 flags. 
ILONLY : 1 if MSIL otherwise 0 
32BITREQ : 1 if 32-bit x86 only assembly otherwise 0 
32BITPREF : 1 if 32-bit x86 only preferred in Any CPU architecture otherwise 0 
Signed : 1 if signed with strong name otherwise 0 

Poniższy przykład ilustruje wyjście C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\CorFlags.exe dla różnych zespołów.

PresentationCore.dll z GAC_32

CorFlags.exe "C:\Windows\Microsoft.NET\assembly\GAC_32\PresentationCore\v4.0_4.0.0.0__31bf3856ad364e35\PresentationCore.dll" 

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 0xb 
ILONLY : 1 
32BITREQ : 1 
32BITPREF : 0 
Signed : 1 

system.data.dll z GAC_64

CorFlags.exe "C:\Windows\Microsoft.NET\assembly\GAC_64\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll" 

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32+ 
CorFlags : 0x18 
ILONLY : 0 
32BITREQ : 0 
32BITPREF : 0 
Signed : 1 

System.dll z GAC_MSIL

CorFlags.exe "C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" 

Version : v4.0.30319 
CLR Header: 2.5 
PE  : PE32 
CorFlags : 0x9 
ILONLY : 1 
32BITREQ : 0 
32BITPREF : 0 
Signed : 1 

Aby dowiedzieć się więcej o Wszelkie procesorów 32-bitowych Preferowane zespoły odnoszą What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11

+0

Świetny przykład .. Dziękuję bardzo. – Karan

6

Aby dodać więcej szczegółów do innych odpowiedzi, rzeczywista ważną wartością jest CorFlags szesnastkowym wartość, ponieważ zawiera najwięcej informacji. Oto lista kawałków, które ją zawierają:

[Flags] 
public enum CorFlags 
{ 
    ILOnly   = 0x00000001, 
    Requires32Bit = 0x00000002, 
    ILLibrary  = 0x00000004, 
    StrongNameSigned = 0x00000008, 
    NativeEntryPoint = 0x00000010, 
    TrackDebugData = 0x00010000, 
    Prefers32Bit  = 0x00020000, 
} 

Corflags wyprowadza cztery bity tej wartości oddzielnie (ILONLY, 32BITREQ, 32BITPREF i podpisane). Jednak pełna wartość CorFlags zawiera również informacje o tym, czy zespół jest silnie podpisany lub podpisany z opóźnieniem (0x8 bit), jak i ILLibrary, NativeEntryPoint i TrackDebugData bitów (nie wiem, co oznaczają).

Należy zauważyć, że CorFlags output Podpisany nie jest dokładnie bitem StrongNameSigned. Wypisze Signed 1, jeśli zespół jest albo podpisany z opóźnieniem, albo w pełni podpisany, podczas gdy bit StrongNameSigned jest ustawiony, jeśli zespół jest w pełni podpisany.

+0

O ile mogę powiedzieć, "CorFlags.ILLibrary" jest ustawiony dla wersji złożeń obrazów. –