首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释CorFlags标志

解释CorFlags标志
EN

Stack Overflow用户
提问于 2013-09-04 08:20:49
回答 3查看 36.4K关注 0票数 63

如何解释CorFlags标志,以及如何使用它来确定.NET程序集是为x86还是x64构建的?

会不会是这样的呢?

代码语言:javascript
复制
corflags MyAssembly.dll
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-04 08:22:03

打开Visual命令提示符(在Windows:菜单启动→程序→→Visual→Visual 2010命令提示符中)

CD到包含有问题的DLL的目录。

运行这样的旗子:

代码语言:javascript
复制
corflags MyAssembly.dll

输出如下所示:

代码语言:javascript
复制
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

国旗的解释:

代码语言:javascript
复制
Any CPU: PE = PE32 and 32BIT = 0

x86: PE = PE32 and 32BIT = 1

64-bit: PE = PE32+ and 32BIT = 0
票数 34
EN

Stack Overflow用户

发布于 2014-05-12 16:17:42

微软.NET 4.5推出了一个新的选项,任CPU 32位首选.在新版本的CorFlags.exe中,32位标志不再存在,而是添加了两个新标志:32BITREQ32 32BITPREF

在以下解释的基础上,我们可以如下所示解释新的CorFlags。

代码语言:javascript
复制
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

CorFlags.exeC:\Program (x86)\Microsoft \Windows\v8.1A\bin\NETFX4.5.1工具上显示的标志 版本:汇编的目标框架。标题: 2.0/2.5 (必须有2.5或更高版本才能本地运行) PE : PE32 (32位)/PE32+(64位) CorFlags :十六进制值,基于以下4个标志计算。ILONLY :1如果MSIL另有0 32 32BITREQ :1,如果32位x86只有程序集,否则为0 32 32BITPREF :1,如果32位x86仅在任何CPU体系结构中首选,则为0签名:1,如果使用强名称签名,否则为0

下面的示例说明不同程序集的C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\CorFlags.exe输出。

PresentationCore.dll来自GAC_32

代码语言:javascript
复制
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来自GAC_64

代码语言:javascript
复制
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来自GAC_MSIL

代码语言:javascript
复制
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

要了解更多关于CPU 32位首选程序集的信息,请参考AnyCPU的真正含义是.NET 4.5和11

票数 107
EN

Stack Overflow用户

发布于 2015-02-05 19:21:28

要向其他答案添加更多细节,实际的重要值是十六进制CorFlags值,因为它携带的信息最多。以下是组成它的比特列表:

代码语言:javascript
复制
[Flags]
public enum CorFlags
{
    ILOnly           = 0x00000001,
    Requires32Bit    = 0x00000002,
    ILLibrary        = 0x00000004,
    StrongNameSigned = 0x00000008,
    NativeEntryPoint = 0x00000010,
    TrackDebugData   = 0x00010000,
    Prefers32Bit     = 0x00020000,
}

Cor频标记分别输出此值的四个位(ILONLY、32BITREQ、32BITPREF和Signed)。然而,完整的CorFlags值还包含有关程序集是强名称签名还是延迟签名(0x8位)以及ILLibrary、NativeEntryPoint和TrackDebugData位(我不知道这意味着什么)的信息。

注意,有符号的CorFlags输出并不完全是StrongNameSigned位。如果程序集是延迟签名或完全签名的,它将打印签名1;而如果程序集仅完全签名,则将设置StrongNameSigned位。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18608785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档