web-dev-qa-db-ja.com

.net Frameworkエラー(HRESULT 0x8007000B)

32ビットWindows XPマシンでVisual Studio 2005を使用して作成されたC#アプリケーションがあります。WindowsXPマシンでは正常に動作しますが、64ビットWindows 7プロフェッショナルマシンで実行しようとすると、起動時に次のダイアログボックスが表示されます。

enter image description here

詳細は全文です。

  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.

他の誰かがこのエラーに遭遇し、解決に成功しましたか?

16
Adam Jakiela

メインアプリは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ではないアセンブリが間違いなくあります。

18
Wes Haggard

プロジェクトプロパティ->ビルド->プラットフォームターゲット-> x86は、この問題を解決する場合があります。

4
Yuliia Ashomok

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

enter image description here

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

enter image description here

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

たくさん検索した後、私は間違いから学びました...そして最終的にこれを得ました

3

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

(64 dllを戻すことを忘れないでください。32ビットアプリを実行するたびに、dll 32を移動するだけです)。

Dllバージョンを見つけることができます here (syswov64フォルダーに貼り付ける前に解凍します)。

2
JinSnow

私にとっての修正は、IISのアプリケーションプールを変更することでした。アプリケーションプールのプロパティを開き、[詳細設定]に移動します。次に、[32ビットアプリケーションを有効にする]をTrueに変更します。新しいもののデフォルトはFalseです。 CPUをx86に設定することで過去に問題を修正しましたが、コード部分は「任意のCPU」に設定されていました。

1
smoore4

私の経験から、そのエラーの原因は.Net Frameworkバージョンです

.Net Frameworkのバージョンと更新を確認し、アプリケーションの.Netバージョンも確認してください。

1

Wixには現在64ビットがないため、32ビットでコンパイルすることで問題が解決しました。インストーラーmsiはいずれの場合も64ビットになります

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

0
Ashish

調査結果も追加したいと思います。[ビルド]タブのプロジェクトプロパティで[32ビットを優先]をオフにすると、このエラーが発生しました。再確認した後、それはなくなりました。任意のCPUをターゲットとして設定しています。

これは明確な解決策ではなく、単に症状を解決するものであることを認識していますが、助けになるかもしれません。

0
Rao

ソリューションが32ビットdllを呼び出したときにこのエラーが発生しました。上記の他の返信で言及されているプラ​​ットフォームの変更に加えて、VS2017 Project {yourproject} Properties Servicesで、「Windows認証を使用」を「フォーム認証を使用」に変更する必要がありました。

Services tab is selected, and in the Authentication section "Use Forms authentication" is selected and circled in red

0
Peter Chambers

同じエラーを解決するには、2〜3の異なる回答のソリューションを組み合わせる必要がありました。その理由は、最終的なセットアップには、x86プラットフォームとx64プラットフォームの両方からのdllが含まれていたためです(個別のexeの個別のフォルダーに)。

1)メインアプリのプラットフォームターゲットを64ビットに設定し、構成設定をそのままにしてビルドしました: enter image description here

2)Deploymentプロジェクトのターゲットプラットフォームをx64に設定します。

3)dllがフォルダ間で混合されていたため、ファイルタイプエディタですべてのdllのソースパスを1つずつ確認し、アーキテクチャに従ってそれらを置き換えました。

4)最後に、次の構成設定で展開プロジェクトを構築しました: enter image description here

上記の組み合わせのみが機能しました。

0
Talha Imam