1

我有一个 C# 项目,它引用非托管的第三方 DLL(即ChilkatDotNet2.dll,但似乎无关紧要)。第三方 DLL 提供 2 个版本,x86 和 x64。processorArchitecture=x86该项目在适当的<Reference>元素中引用了 x86 版本。它在 Debug|Any CPU 和 Release|Any CPU 中构建得很好。

现在我将引用更改为 x64 版本的第三方 DLL - 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 中构建得很好?

4

3 回答 3

2

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

于 2011-11-21T15:57:28.937 回答
1

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

于 2011-11-21T16:12:16.203 回答
0

好吧,问题似乎隐藏在该项目是从旧版本的 VS 升级的事实中(我想,从 2005 年开始)。我从头开始重新创建它,添加了所有必要的东西,它可以工作了!此外,它变得与坏的相同,这让我发疯:一个有效,另一个无效。

所以,我放弃了,因为“太阳正在升起?不要碰那里的任何东西”。:) 感谢所有建议尝试选项的人 - 我感谢您的努力 (+1)。

接受我自己的答案以将线程标记为完整,但不要投票 - 它不包含有用的信息......

于 2012-02-10T12:48:56.910 回答