在部署到Windows Server 2012 R2时出现BadImageFormatException错误

3
我正在将我的Asp.net应用程序部署在Windows Server 2012 R2(x64)上。在使用64位dll时,我遇到了运行时BadImageFormatException错误。当我在IIS Express中运行它或在本地机器IIS上发布应用程序时,一切正常(应用程序池->解决方案名称->启用32位应用程序设置为False,解决方案中的所有项目也都设置为平台目标x64)。 部署通过Team City&Octopus Deploy进行。
这个问题的解决方案是什么?
更新: System.BadImageFormatException:尝试加载具有不正确格式的程序。 (来自HRESULT的异常:0x8007000B),libxl.XmlBook.xlCreateXMLBookC(),xxx.Controllers.xxx.xxxController.LibxlTest(),位于C:\ TeamCity \ buildAgent \ work \ aeb63fe0b246a1f3 \ xxx \ xxx \ Controllers \ xxx \ xxx \ xxxController.cs:第597行
服务器上没有C:\ TeamCity \ buildAgent \路径,那里是Octopus Tentacle所在的地方。

@DaiBak,很遗憾,没有帮助。 - col403
你确定你的引用中没有32位dll吗?你可以使用像http://ilspy.net/或http://www.jetbrains.com/decompiler/这样的工具进行检查。 - user326608
使用这两个工具,都无法找到托管程序集。 - col403
好的,那看起来不太好。那么dll怎么会在你的本地机器上运行呢?这一定是部署的dll被某种方式搞乱了。听起来像是你的CI/CD系统出了问题。 - user326608
@user326608,我已经添加了一些细节。 - col403
显示剩余3条评论
2个回答

1
最终,它与x86版本配合使用(来自bin文件夹),而解决方案是为x64构建的。这可能是libxl的特殊性。因此,我正在使用x64进行开发,并在部署后通过我的后置部署脚本更改为x86版本。

0

好的,看起来你或者你的引用之一依赖于libXL

你的异常结果(0x8007000B)明显是32位无法在64位上加载的问题。

libXL是一个C++项目,在下载zip中有一个bin64文件夹,其中包含一个可以在64位模式下工作的libxl.dll副本。

如果你有一个已经授权的libXL副本,最好使用那个64位dll。

请注意,C:\TeamCity\buildAgent\来自构建你的项目的机器,行号等信息被保存在你的pdb文件中。


我有大约 pdb 文件,谢谢。服务器肯定是 x64 并且我使用来自 bin64 文件夹的 libxl.dll(~9mb)。 - col403

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接