6

複数の既存のライブラリを使用して、Windows 8 64 ビット マシンで Web アプリケーションに取り組んでいます。1 つのネイティブ DLL を参照する 2 つの C# DLL を使用したいと考えています。どちらの C# DLL も 64 ビット用にコンパイルされ、テスト アプリケーションでテストされています。私の Web アプリケーションは両方の C# DLL を参照しており、IIS 8 で実行することになっています。2 つの C# DLL をプロジェクトへの参照として追加し、ネイティブ DLL を Web アプリの bin フォルダーに手動で追加しました。ソリューションをビルドして実行するたびに、タイトルに示されている例外が発生します。これは、1 つのプロセスで実行される 32 ビットと 64 ビットのコードに関する問題の兆候であることはわかっています。したがって、さまざまなビルド構成をすべて試しましたが、結果は変わりませんでした。

Web アプリで試していることを正確に実行するコンソール アプリケーションを作成しましたが、問題なく動作しました。ただし、まったく同じ設定の Web アプリケーションは例外をスローします。これは、私にとって本当に混乱を招くものです。

私がこれまでに試したこと:

  • アプリケーション プールの設定を「32 ビット アプリケーションを有効にする」に変更します。
  • 任意の CPU、64 ビットまたは x86 ターゲットですべての DLL をビルド
  • すべての DLL のコルフラグをチェックする

この構成を実行するのを手伝ってくれる人には、プロジェクトのエクスポートを提供できます。

私は本当に助けてくれてありがとう!

4

3 に答える 3

0

ターゲットプラットフォーム(プロジェクトプロパティのビルドオプション)を設定してみたと思いますか?また、この記事もご覧ください:http: //www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

于 2013-02-19T10:18:04.567 に答える
0

アプリケーションで同じ問題が発生しました。以下を実行した後、修正されました。

* Web サイト フォルダで「匿名」ユーザーに許可を与える。
* アプリケーション プールを「.NET v4.5 Classic」から「.NET v4.5」に変更します。

于 2014-02-11T19:42:06.727 に答える
0

私が提供できるのは、ロードされていないものを特定するための助けだけです。開発サーバーの場合は、適切な SDK をインストールしてFusion Log Viewerを使用することをお勧めします。それができない場合は、次のようにレジストリからアセンブリ バインディングのログを有効にすることができます。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion]
"LogFailures"=dword:00000001
"LogPath"="c:\\bindFailureLogs\\"

完了したら必ずオフにしてください。アセンブリ バインド ログを使用すると、パフォーマンスが低下します。レジストリ キーを入力し、アプリケーションのアプリケーション プールをリサイクルしてログを開始する前に、フォルダーが存在することを確認してください。これにより、ロードされなかった dll (または、依存関係またはエラー メッセージにリストされている dll であるかどうかが常に明確であるとは限らないため、依存関係) の詳細なリストと、どこからロードしようとしたかの詳細なリストが提供されます。

問題を修正するアプリケーションのパーティション分割は、異なるバージョンを対象とするアセンブリに複数の依存関係があり、アプリ ドメインに読み込むことができるアセンブリのバージョンは 1 つだけであるため、いくつかの依存関係が満たされていないことを示唆しています。マネージ アセンブリの場合は、アセンブリ バインディングの redirectを使用できますが、それが存在する場合でも、それと同等のアンマネージが何であるかはわかりません。

于 2014-09-06T14:52:23.757 に答える