Làm cách nào để diễn giải các cờ CorFlags và cách sử dụng nó để xác định xem một assembly .NET có được xây dựng cho x86 hay x64 không?Làm cách nào để diễn giải cờ CorFlags?
Có thể nào sau đây?
corflags MyAssembly.dll
Làm cách nào để diễn giải các cờ CorFlags và cách sử dụng nó để xác định xem một assembly .NET có được xây dựng cho x86 hay x64 không?Làm cách nào để diễn giải cờ CorFlags?
Có thể nào sau đây?
corflags MyAssembly.dll
Mở Visual Studio Command Prompt (Trong Windows: Menu Start/Programs/Microsoft Visual
Studio/Visual Studio Tools/Visual Studio 2010 Command Prompt)
CD vào thư mục chứa các DLL trong câu hỏi
Run CorFlags như thế này:
corflags MyAssembly.dll
Kết quả trông như thế này:
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
Cờ giải thích:
Any CPU: PE = PE32 and 32BIT = 0
x86: PE = PE32 and 32BIT = 1
64-bit: PE = PE32+ and 32BIT = 0
Bạn cũng có thể sử dụng bảng này:
CPU | PE | 32BIT ----------|-------|------ x86 | PE32 | 1 Any CPU | PE32 | 0 x64 | PE32+ | 0
Cũng trong * [Làm thế nào để xác định xem một hội đồng. NET được xây dựng cho x86 hay x64?] (Http://stackoverflow.com/questions/270531/how-to-determine-if-a-net-assembly-was- built-for-x86-or-x64/270545 # 270545) * –
Microsoft .NET 4.5 giới thiệu một tùy chọn mới, Bất kỳ CPU 32-bit Ưu tiên. Trong phiên bản mới của CorFlags.exe, cờ 32BIT không còn tồn tại, thay vào đó, hai cờ mới đã được thêm vào, 32BITREQ và 32BITPREF.
Một nơi nào đó dựa trên giải thích dưới đây, chúng tôi có thể giải thích các thẻ CorFlags mới như sau.
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
Flags hiển thị bởi CorFlags.exe tọa lạc tại C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v8.1A \ bin \ NETFX 4.5.1 Công cụ
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
Ví dụ sau minh họa đầu ra của C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\CorFlags.exe
cho hội khác nhau.
PresentationCore.dll từ 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 từ 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 từ 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
Để biết thêm về Bất kỳ CPU 32-bit ưa thích hội tham khảo What AnyCPU Really Means As Of .NET 4.5 and Visual Studio 11
Ví dụ tuyệt vời .. Cảm ơn bạn rất nhiều. – Karan
Để thêm chi tiết hơn để các câu trả lời khác, giá trị quan trọng thực tế là CorFlags thập lục phân giá trị vì nó mang nhiều thông tin nhất. Dưới đây là danh sách các bit mà bao gồm nó:
[Flags]
public enum CorFlags
{
ILOnly = 0x00000001,
Requires32Bit = 0x00000002,
ILLibrary = 0x00000004,
StrongNameSigned = 0x00000008,
NativeEntryPoint = 0x00000010,
TrackDebugData = 0x00010000,
Prefers32Bit = 0x00020000,
}
CorFlags kết quả đầu ra bốn bit của giá trị này riêng (ILONLY, 32BITREQ, 32BITPREF và ký). Tuy nhiên, giá trị CorFlags đầy đủ cũng chứa thông tin về việc assembly có được ký tên mạnh hay ký trễ (0x8 bit) cũng như các bit ILLibrary, NativeEntryPoint và TrackDebugData (tôi không biết ý nghĩa của nó).
Lưu ý rằng đầu ra CorFlags Đã ký không chính xác là bit StrongNameSigned. Nó sẽ in Signed 1 nếu assembly bị trì hoãn hoặc được ký đầy đủ, trong khi bit StrongNameSigned được thiết lập nếu assembly chỉ được ký đầy đủ.
Theo như tôi có thể nói, 'CorFlags.ILLibrary' được đặt cho phiên bản Hình ảnh Gốc của các hội đồng. –
Câu trả lời tại http://stackoverflow.com/a/23614024/3923734 được cập nhật nhiều hơn số này. – user145400
Trong khi kỹ thuật xác định cho thời gian của nó .... câu trả lời dưới đây cho .NET 4.5 là chính xác hơn/cập nhật. –
Là trình biên dịch "Mọi CPU", đầu ra Corflags là lạ đối với tôi PE: PE32 + | 32BIT: 0. là điều này có thể? –