在发布版本中构建而不是在 VS2008 中调试时,程序集将成为 32 位特定的
在为我的一个模块构建程序集时,我遇到了一个奇怪的问题。
我在 64 位上运行时遇到错误,我追溯到与特定于 32 位的程序集有关。我们的模块(或应该)都被构建为有点不可知。
在程序集上运行 CorFlags.exe 显示以下内容。
版本:v2.0.50727
CLR 标头:2.5
PE:PE32
CorFlags:11
ILONLY:1
32BIT:1 <-- 注意 32 位标志设置为 1!
签名:1
但是,我随后返回重建模块,并且恰好在调试模式下构建。 (注:这是故事的简化版本,省略了解决方案测试、谷歌搜索和与龙战斗的时间:D)
这次当我检查 CorFlags.exe 时,它给出了以下内容:
版本:v2.0.50727
CLR 标头: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
所以现在我很困惑,拆开了 Visual Studio 构建配置并发现它们完全相同(即全部设置为“任何 CPU”)现在不知道如何解决这个问题。
什么会导致这种行为?
I am having a strange issue when building assembly's for one of my modules.
I was getting errors when running on 64bit which I traced back to being related to the assembly being 32bit specific. Our modules are(or should) all be built to be bit agnostic.
Running CorFlags.exe on the assembly showed the following.
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 11
ILONLY : 1
32BIT : 1 <-- Note the 32bit flag set to one!
Signed : 1
However I then went back to rebuild the module and just so happened to build in debug mode. (Note: this is the simplified version of the story missing out the hours of solution testing, googling and a fight with a dragon :D)
This time when I checked CorFlags.exe it gave the following:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 9
ILONLY : 1
32BIT : 0
Signed : 1
So now I am confused, having torn apart the visual studio build configs and found them to be exactly the same (i.e. all set to "Any CPU") I am now at a loss as to how to fix this.
What would cause this behaviour?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
构建+配置管理器,在左上角的组合中选择发布。关闭。现在使用“项目+属性”、“构建”选项卡并验证平台目标。
Build + Configuration Manager, select Release in the upper left combo. Close. Now use Project + Properties, Build tab and verify Platform Target.
我不确定是什么导致了这种行为,但这里有一个可能的解决方法:
您是否尝试过使用 /32BIT- 标志运行 CorFlags 以从程序集中清除 32BIT 标志?如果它有效,您可以添加一个构建后步骤来清除该标志。
I am not sure what's causing this behavior but here is a possible workaround:
Have you tried running CorFlags with /32BIT- flag to clear the 32BIT flag from the assembly? If it work you can add a postbuild step to cleat that flag.