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 プロセスとして実行されていることを示していますが、BadImageFormatException の原因である可能性が高い AnyCPU または x64 ではないアセンブリがあるようです。

1 つの方法は、アプリケーションを 32 ビット コマンド プロンプト (c:\windows\SysWow64\cmd.exe) から実行して、強制的に 32 ビット プロセスにし、それが機能するかどうかを確認することです。それが機能する場合、AnyCPU ではないアセンブリが確実に存在します。

于 2013-08-02T03:50:58.403 に答える
3

私の場合、アプリが64 Windows 7で32ビットで実行されていたため、0x8007000Bエラーが発生しました.windows / syswov64フォルダーに移動して、MSVCR110.dllバージョン64ビットをMSVCR110.dllバージョン32ビットに変更して解決しました。

(後で64 dllを元に戻すことを忘れないでください。32ビットアプリを実行する必要があるたびに、dll 32をその上に移動するだけです)。

ここで dll のバージョンを見つけることができます(syswov64 フォルダーに貼り付ける前に解凍してください)。

于 2016-04-01T10:27:20.050 に答える
3

最も一般的な間違いの 1 つは、テスト プログラムとラッパー プログラムを正しいプラットフォームに変更するのを忘れたことです。下の画像を参照してください

ここに画像の説明を入力

(上部のバーでは、プラットフォームが x64 であることを示していますが、2 番目のイメージに実際に存在するかどうかを確認する必要があります ...)

ここに画像の説明を入力

構成マネージャーで構成が正しいことを確認してください...構成がC++ dllの実際の構成と一致しない場合、BadImageFormatExceptionが発生します。

いろいろ調べて失敗から学び…やっとこれにたどり着きました

于 2017-10-03T09:52:55.187 に答える