Jak interpretować flagi CorFlags i jak ich użyć do określenia, czy zestaw .NET został zbudowany dla x86 lub x64?Jak interpretować flagi CorFlags?
Czy może być następujące?
corflags MyAssembly.dll
Jak interpretować flagi CorFlags i jak ich użyć do określenia, czy zestaw .NET został zbudowany dla x86 lub x64?Jak interpretować flagi CorFlags?
Czy może być następujące?
corflags MyAssembly.dll
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
Można również skorzystać z tej tabeli:
CPU | PE | 32BIT ----------|-------|------ x86 | PE32 | 1 Any CPU | PE32 | 0 x64 | PE32+ | 0
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) * –
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
Świetny przykład .. Dziękuję bardzo. – Karan
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.
O ile mogę powiedzieć, "CorFlags.ILLibrary" jest ustawiony dla wersji złożeń obrazów. –
Odpowiedź na http://stackoverflow.com/a/23614024/3923734 jest bardziej aktualna niż ta. – user145400
Chociaż technicznie poprawny na czas .... odpowiedź poniżej dla .NET 4.5 jest bardziej dokładne/aktualne. –
Jako kompilacja "Any CPU", wyjście Corflags jest dla mnie dziwne PE: PE32 + | 32BIT: 0. jest to możliwe? –