0

サードパーティのプロバイダーからの dll があります。MVC プロジェクトから参照しましたが、すべて正常に動作します。

その dll を使用するすべてのコードを別のプロジェクトに引き出すことにしました。次に、MVC プロジェクトから dll の参照を削除し、代わりに、その API のラッパー/抽象化である他のプロジェクトを参照しました。

現在、サーバーがロードしようとしているときに、次のエラーが表示されます。

Could not load file or assembly 'xxxx' or one of its dependencies. An attempt was made to load a program with an incorrect format.

このサイトやその他の場所で、x64 と x86 の比較など、風変わりなシナリオを扱う質問をたくさん見てきましたが、私の状況がここに当てはまるかどうかはわかりません。念のため、両方のプロジェクトで x86/x64/any cpu のすべての可能な組み合わせを試してみましたが、効果はありませんでした。

ここで何が欠けていますか、または何が間違っていましたか?

4

3 に答える 3

0

Zephryl の提案のおかげで、次のアセンブリ バインド ログを取得しました。

LOG: User = IIS APPPOOL\DefaultAppPool
LOG: DisplayName = Laserfiche.I18n83
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: Laserfiche.I18n83 | Domain ID: 5
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.

私は頭がいっぱいなので、パニックグーグルを始めたところ、このSO投稿に出くわし、ものをに設定するように言われましたCopyLocal=true。それが何を意味するのかについてグーグルで調べてみると、なぜこれを行うのが悪いのか、天才なのかについて多くの白黒の意見が生まれました。これは効果がありませんでしたCopyLocal=trueが、このサードパーティ製ツールに付属のコンパニオン dll を設定すると、突然動作し始めました!

部分バインディングが正確に何を意味するのか、それを回避する方法、またはより良い方法があるかどうかはわかりませんが、これでうまくいくようです。これの負の副作用が発生した場合は、ここでフォローアップします.

于 2013-11-12T16:47:21.133 に答える