2

2 つのアプリケーションを統合するために、Visual Studio 2010 を使用して Windows サービス アプリケーションを開発しました。

私の WinService では、宛先アプリケーションの開発者が提供するいくつかの API DLL ファイルを呼び出して、元のアプリケーションから情報を取得した後、宛先アプリケーションで情報を作成します。

したがって、私の Windows サービスはミドルウェア アプリケーションのように機能します。

サービスを実行すると、次のエラーが発生します。

System.BadImageFormatException: Could not load file or assembly 'Interop.ErpBS800, Version=8.5.0.0, Culture=neutral, PublicKeyToken=e076e239d0e78a42' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'Interop.ErpBS800, Version=8.5.0.0, Culture=neutral, PublicKeyToken=e076e239d0e78a42'
   at MaeilKitWintouch.Primavera.CreateDocument(Facturas fac)
   at MaeilKitWintouch.MaeilKitWintouch.ExecuteRequest()


WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

私の Windows 7 x86 ラップトップではすべて問題なく動作しますが、Windows Small Business Server 2011 Essentials 64 ビットではそのエラーが発生します。

私は PLATFORM TARGET = Any CPU と TARGET FRAMEWORK = .NET 4 を持っています。

4

2 に答える 2

4

アプリケーションが 64 ビット モードで実行されている可能性が高く (プラットフォーム ターゲットをAny CPUに設定しているため、これは許可されています)、32 ビット ライブラリをロードしようとしています。

ブログ投稿Compiling .NET for a Specific Target Platform (Any CPU vs x86 vs x64)によくまとめられています。

于 2012-09-05T16:07:16.467 に答える
0

このエラーに対する私の解決策は、4 日間の「プラットフォーム戦争」の後、x86/x64 に変更した場合、同じエラーが発生しました....

私がしたことは:

  1. Visual Studio からすべてのプロジェクトと競合している DLL への参照をアンロードします (また、参照を含むすべてのコード行にコメントを付けます)。プロジェクトはエラーなしで実行する必要があります。
  2. メイン アプリで、[プロパティ] -> [コンパイル] -> [高度なコンパイル オプション] -> [Tarjet CPU] に移動し、ここで x86 に変更します。
  3. プロジェクトを再コンパイルする
  4. プロジェクト/参照を DLL にロード
  5. 正常に動作するかテストする
  6. すべてのコード行のコメントを外して再コンパイルします
于 2015-01-20T20:40:57.410 に答える