我将视觉工作室解决方案从2008年转换为2010年。一个项目提到了ShDocVw。当我运行程序时,我得到一个BadImageFormatException。谷歌搜索让我用corflags检查互操作库:
corflags Interop.ShDocVw.dll
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 3
ILONLY : 1
32BIT : 1
Signed : 0
果然,设置了32BIT标志,因此我在64位计算机上构建为Any CPU的应用程序无法加载此库。如果我运行corflags / 32BIT-我可以关闭32BIT标志,一切正常。问题是,为什么使用该标志设置生成此Interop库?我没有VS2008那个问题,这只是在升级后才开始发生的。
更重要的是,如何修复它以便我不必运行corflags来关闭它?我认为这可能是由于一些我不太了解的MSBuild-fu。无论如何,我无法发现任何东西。
答案 0 :(得分:2)
问题是升级后,< PlatformTarget> 标记未在C#项目文件中的某些< PropertyGroups> 中设置,显然默认为x86 。所以,要解决这个问题,请转到项目属性 - >构建选项卡并将平台目标设置为AnyCPU以外的其他内容,保存它。现在将其设置回AnyCPU并保存。 < PlatformTarget> 将以AnyCPU的值写入项目,一切顺利。