我在Windows 7计算机中使用Visual Studio 2012。 I7处理器。
我有一个托管C ++ / CLI库。该项目还引用了Native C ++静态库。 我已为x86配置了所有内容。
然而,当我构建时,如果我用CorFlags检查生成的dll,它会说:
PE:PE32
CorFlags:24
ILONLY:0
32BIT:0
签名:1
根据this帖子,这意味着我的dll适用于AnyCPU?我试图找到更多关于如何解释标志的文档,但我没有发现任何不同的东西。
我很困惑,如果我使用配置为“x86”的平台构建,那么32Bit标志不应该是1吗?
我错过了一些额外的配置吗?
答案 0 :(得分:4)
混合模式组件有点怪癖。 ILONLY旗帜在这里占主导地位。将它设置为0,它告诉CLR程序集包含的内容多于MSIL,它还包含机器代码。这打破了32BIT选项的相关性,只有当进程的位数与文件中机器代码的位数一致时,程序集才能正常工作。
由可执行标头设置,IMAGE_FILE_HEADER.Machine确定。就像它对包含机器代码的任何可执行文件一样。 Corflags不显示它,您可以使用dumpbin.exe / headers
查看它