发布于 2013-09-04 08:22:03
打开Visual命令提示符(在Windows:菜单启动→程序→→Visual→Visual 2010命令提示符中)
CD到包含有问题的DLL的目录。
运行这样的旗子:
corflags MyAssembly.dll输出如下所示:
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国旗的解释:
Any CPU: PE = PE32 and 32BIT = 0
x86: PE = PE32 and 32BIT = 1
64-bit: PE = PE32+ and 32BIT = 0发布于 2014-05-12 16:17:42
微软.NET 4.5推出了一个新的选项,任CPU 32位首选.在新版本的CorFlags.exe中,32位标志不再存在,而是添加了两个新标志:32BITREQ和32 32BITPREF。
在以下解释的基础上,我们可以如下所示解释新的CorFlags。
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 1CorFlags.exe在C:\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
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 : 1System.Data.dll来自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 : 1System.dll来自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要了解更多关于CPU 32位首选程序集的信息,请参考AnyCPU的真正含义是.NET 4.5和11。
发布于 2015-02-05 19:21:28
要向其他答案添加更多细节,实际的重要值是十六进制CorFlags值,因为它携带的信息最多。以下是组成它的比特列表:
[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位。
https://stackoverflow.com/questions/18608785
复制相似问题