24

我有一个使用 Visual Studio 2005 在 32 位 Windows XP 机器上编写的 C# 应用程序。该应用程序在 Windows XP 机器上运行良好,但是当我尝试在 64 位 Windows 7 专业机器上运行它时,我得到以下对话框启动时:

在此处输入图像描述

这是详细信息的全文。

  See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
   at ICSNeoCSharp.IcsNeoDll.icsneoTxMessages(Int32 hObject, IcsSpyMessage& pMsg, Int32 lNetworkID, Int32 lNumMessages)
   at ICSNeoCSharp.FormDTCApplication.transmitFlowControl(Int32 myArbID) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 1750
   at ICSNeoCSharp.FormDTCApplication.flowControlTimer_Tick(Object sender, EventArgs e) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 5166
   at System.Windows.Forms.Timer.OnTick(EventArgs e)
   at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5472 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
DTC Checker V1.0
    Assembly Version: 1.0.4960.25549
    Win32 Version: 1.0.4960.25549
    CodeBase: file:///C:/DTC%20Checker%20V1.0%20R3/DTC%20Checker%20V1.0%20R3.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5468 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.Office.Interop.Excel
    Assembly Version: 12.0.0.0
    Win32 Version: 12.0.6600.1000
    CodeBase: file:///C:/Windows/assembly/GAC/Microsoft.Office.Interop.Excel/12.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Excel.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

有没有其他人遇到过这个错误并成功解决?

4

10 回答 10

30

虽然您的主应用程序可能是为 AnyCPU 构建的,但您确定所有程序集都是 AnyCPU 吗?您是否有任何本机程序集或包含本机代码的程序集?它们是针对 x86 构建的吗?

file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll

这告诉我该应用程序作为 x64 进程运行,但似乎有一些不是 AnyCPU 或 x64 的程序集,这可能是 BadImageFormatException 的原因。

您可以尝试的一件事是从 32 位命令提示符 (c:\windows\SysWow64\cmd.exe) 运行应用程序,以强制它成为 32 位进程并查看是否有效。如果可行,那么肯定有一些不是 AnyCPU 的程序集。

于 2013-08-02T03:50:58.403 回答
7

Project Properties -> Build -> Platform target -> x86可以解决这个问题。

于 2014-11-06T06:49:50.687 回答
3

就我而言,我遇到了 0x8007000B 错误,因为该应用程序在我的 64 个 Windows 7 上以 32 位运行。我通过进入 windows/syswov64 文件夹将 MSVCR110.dll 版本 64 位更改为 MSVCR110.dll 版本 32 位来解决它。

(只是不要忘记在之后放回 64 dll。每次您需要运行 32 位应用程序时,只需将 dll 32 移动就可以了)。

您可以在此处找到 dll 版本(在粘贴到 syswov64 文件夹之前解压缩)。

于 2016-04-01T10:27:20.050 回答
3

最常见的错误之一是我们忘记将测试程序和包装程序更改为正确的平台。见下图

在此处输入图像描述

(在顶部栏中,它显示平台是 x64,但您需要确保它是否真的存在于第二张图像中......)

在此处输入图像描述

确保您在配置管理器上进行了正确的配置...如果您的配置与您的 c++ dll 的实际配置不匹配,它将给出 BadImageFormatException。

经过大量搜索,我从错误中吸取了教训……终于得到了这个

于 2017-10-03T09:52:55.187 回答
1

根据我的经验,该错误的原因是 .Net Framework 版本

检查您的 .Net Framework 版本和更新,并检查您的应用程序的 .Net 版本。

于 2013-08-02T02:57:36.363 回答
1

我的解决方法是更改​​ IIS 中的应用程序池。打开应用程序池属性并转到高级设置...然后将“启用 32 位应用程序”更改为 True。新的默认值为 False。尽管我过去通过将 CPU 设置为 x86 来解决问题,但代码部分设置为“任何 CPU”。

于 2017-06-13T22:34:52.987 回答
0

我的问题通过使用 32 位编译解决了,因为 Wix 目前没有 64。您的安装程序 msi 无论如何都是 64 位的

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/64bit-bootstrapper-using-wix-td7582851.html

于 2016-03-08T12:27:58.963 回答
0

我还想补充一下我的发现:我在“构建”选项卡中的项目属性中取消选中“首选 32 位”并收到此错误。重新检查后,它消失了。我将任何 CPU 设置为目标。

我知道这不是一个明确的解决方案,只是解决症状,但它可能会有所帮助。

于 2017-03-03T10:52:30.553 回答
0

当我的解决方案调用 32 位 dll 时出现此错误。除了进行上述其他回复中提到的平台更改外,在 VS2017 Project {yourproject} Properties Services 中,我不得不将“使用 Windows 身份验证”更改为“使用表单身份验证”

服务选项卡被选中,并在身份验证部分

于 2018-06-11T22:03:12.403 回答
0

我必须结合 2-3 个不同答案的解决方案来解决相同的错误。原因是,最终设置具有来自 x86 和 x64 平台的 dll(在单独的文件夹中用于单独的 exe)。

1)我将我的主应用程序的平台目标设置为 64 位,并保留配置设置并构建它: 在此处输入图像描述

2) 我将部署项目的目标平台设置为 x64。

3)文件夹之间的dll混合在一起,所以我在文件类型编辑器中一一检查所有dll的源路径,并根据它们的体系结构替换它们。

4)最后使用以下配置设置构建部署项目: 在此处输入图像描述

上述组合是唯一有效的组合。

于 2018-10-04T08:39:33.613 回答