引用非托管第三方程序集的C#项目在Debug中构建良好,但在Release配置中失败

时间:2011-11-21 15:52:53

标签: c# visual-studio msbuild csproj

我在C#中有一个项目,它引用了非托管第三方DLL(ChilkatDotNet2.dll,但似乎并不重要)。第三方DLL提供2个版本,x86和x64。该项目在相应的processorArchitecture=x86元素中引用x86版本 - <Reference>。它在Debug | Any CPU和Release | Any CPU中都可以正常构建。

现在我将对第三方DLL的x64版本的引用更改为processorArchitecture=AMD64。 (请不要问我原因,请:))。 Debug | Any CPU再次构建得很好。但是Release | Any CPU因错误而失败:An attempt was made to load an assembly with an incorrect format: ChilkatDotNet2.dll

可能是什么原因?我认为这是因为VS本身作为32位进程运行(对吗?),但为什么它在Debug中构建良好?

3 个答案:

答案 0 :(得分:2)

您的版本配置中的平台类型可能不正确。如果您强烈引用x86 / AMD64程序集,那么您的构建不能是任何CPU,并且必须是特定于平台的

答案 1 :(得分:1)

我很惊讶这是一个编译时错误。根据我的经验,这些问题在运行时显示为BadImageFormatException。虽然您的解决方案平台是Any CPU,但我会检查引用项目的目标平台,以确保它也设置为Any CPU。此外,默认情况下,visual studio将使用x86配置创建应用程序项目,而不是任何CPU。因此,即使引用项目设置为Any CPU,入口应用程序项目最终也是引用任何CPU目标项目的JIT的决定因素。

答案 2 :(得分:0)

好吧,问题似乎隐藏在项目从旧版VS升级的事实中(我想,从2005年开始)。我从头开始重新创建它,添加了所有必要的东西,它的工作原理!而且,对于坏人来说它变得一致,这让我疯了:一个有效,另一个没有。

所以,我放弃了#34;太阳升起了?别碰任何东西&#34;。 :)感谢所有建议选项的人 - 感谢您的努力(+1)。

接受我自己的回答,将该主题标记为完整,但不要将其投票 - 它不包含有用的信息...