私のプロジェクト構造は次のようになります。
myApp
-->WCFSerLib (Any CPU Deafult application)
-->ClassLib1 (Any CPU)
-->ClassLib2 (x86)
アプリケーションを実行しようとすると、残念ながら以下のエラーが発生します。
System.BadImageFormatException was unhandled by user code
上記を達成できる方法はありますか?
ありがとう
x64マシンでx86 dllを使用しようとしているよりも正しいと思います。AnyCPU を使用すると、.net フレームワークは現在のアーキテクチャを自動的に使用します。
したがって、アプリケーションは、失敗する x86 ライブラリをロードしようとする x64 アプリケーションとして実行されます。したがって、次の 2 つのオプションがあります。
環境変数のどこかに両方のバージョン (x86/x64) がある場合、オペレーティング システムは正しいバージョンを自動的に選択します。
アプリケーションを x64 システムで実行しているとします。
このようにプラットフォーム タイプを混在させると、WCFService ライブラリまたは ClassLib1 が ClassLib2 のメソッドを呼び出すときに BFE が発生します。最初の 2 つは 64 ビット プロセスとして実行され、後者は x86 モードで強制的に実行されるためです。
すべてのプロジェクトで同じプラットフォーム タイプを設定する必要があります。
もちろん、WCFService ライブラリは AnyCPU のみをサポートするため、すべてのプロジェクトで AnyCPU プラットフォーム タイプを使用するのが理にかなっています。
ClassLib2 で 32 ビット ライブラリ (winscard.dll) を使用する必要があり、そのライブラリの 64 ビット バージョンがない場合は、サービス ライブラリの代わりに WCF サービス アプリケーションを使用する必要があると思います。この質問を参照してください
君たちありがとう、
問題はwinscard.dllにあり、 Int32 であるハンドルを使用します。私が変更したのはInt32をInt64に置き換えることだけです。