我有一个C#应用程序,它是用32位Windows XP机器和Visual Studio 2005编写的。该应用程序在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.
是否有其他人遇到此错误并成功解决了该问题?
答案 0 :(得分:18)
虽然您的主应用程序可能是为AnyCPU构建的,但您确定所有程序集都是AnyCPU吗?您是否有任何包含本机代码的本机程序集或程序集?它们是针对x86构建的吗?
文件:/// C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
这告诉我该应用程序是作为x64进程运行的,但似乎有一些程序集不是AnyCPU或x64,这可能是BadImageFormatException的原因。
您可以尝试的一件事是从32位命令提示符(c:\ windows \ SysWow64 \ cmd.exe)运行该应用程序,强制它是一个32位进程,看看是否有效。如果这样可行,那么肯定会有一些不是AnyCPU的程序集。
答案 1 :(得分:4)
项目属性 - &gt;构建 - &gt;平台目标 - &gt; x86 可以解决这个问题。
答案 2 :(得分:3)
最常见的错误之一是我们忘记将测试程序和包装程序更改为正确的平台。见下图
(在顶部栏中显示平台是x64,但你需要确定它是否真的存在于第二张图片中......)
确保您在Configuration Manager上具有正确的配置...如果您的配置与c ++ dll的实际配置不匹配,则会给出BadImageFormatException。
我在搜索了很多之后从错误中学到了......最后得到了这个
答案 3 :(得分:2)
在我的情况下,我有0x8007000B错误,因为应用程序在我的64个Windows 7上以32位运行。我通过进入Windows / syswov64文件夹解决了它,将MSVCR110.dll版本更改为MSVCR110.dll版本64位32位
(只是不要忘记在之后放回64 dll。每次你需要运行你的32位应用程序时,只需移动它上面的dll 32。)
你可以找到dll版本here(在粘贴到syswov64文件夹之前解压缩它)。
答案 4 :(得分:1)
根据我的经验,该错误的原因是.Net Framework版本
检查您的.Net Framework版本并进行更新 检查应用程序的.Net版本。
答案 5 :(得分:0)
我的问题通过32位编译解决,因为Wix目前没有64位。你的安装程序msi在任何情况下都是64位
答案 6 :(得分:0)
我想补充一下我的发现:我在Build选项卡中的项目属性中取消选中a&#34;首选32位&#34;并得到了这个错误。重新检查后,它消失了。我将任何CPU设置为目标。
我知道这不是一个明确的解决方案,只是一个症状解决方案,但它可能会有所帮助。
答案 7 :(得分:0)
我的修复方法是更改IIS中的应用程序池。打开应用程序池属性并转到高级设置...然后更改&#34;启用32位应用程序&#34;真的。新的默认值为False。代码部分设置为&#34;任何CPU&#34;虽然我过去通过将CPU设置为x86来修复问题。
答案 8 :(得分:0)
当我的解决方案调用32位dll时出现此错误。除了在上面的其他回复中提到平台更改之外,在VS2017项目{yourproject}属性服务中,我不得不更改&#34;使用Windows身份验证&#34;到&#34;使用表单身份验证&#34;
答案 9 :(得分:0)