2016-08-02 7 views
0

の.NET Framework 4.0 のWindows 2012一貫性のない "間違ったフォーマット" エラー

私は2つのEXEの単一のDLLを使用することがあります。 EXEのの一つは、常に動作しますが、他のEXEは、常にこのメッセージで失敗します。

は、ファイルまたはアセンブリをロードできませんでした「{dllHere}、バージョン= 1.0.0.0、カルチャニュートラル、PublicKeyToken = = null」または1その依存関係の不正な形式のプログラムを読み込もうとしました。」

各EXEは別々のフォルダにあり、各フォルダには独自のDLLのコピーが含まれています。間違ったCPU用のDLL。それが1 EXEのために働くので、私はそれが問題であることが表示されません。私のWin7のPCとWin2003のサーバー上

両方EXEの実行の罰金。

何がこのエラーの原因は?

+2

実行ファイルはどのようにコンパイルされていますか?それらが "CPU any"の場合、同じexeは32ビットまたは64ビットのどちらでも動作します。 dllも "CPU any"でコンパイルされていることを確認してください。 – ChrisF

+0

これはプログラミング上の質問ではないので、スーパーユーザーに確認する必要がありますか? – Randy

答えて

0

両方のプロジェクト(.EXE)が同じプラットフォームターゲットを使用していることを確認します。ライブラリのターゲットプラットフォームに応じて、x86またはx64のいずれかでコンパイルします。

+0

失敗したEXEとDLLの両方に「ターゲットCPU:x86」があります。私のWin7 PCでは、* 32というサフィックスが表示されます。 Win2012サーバーには、そのサフィックスはありません。 – user2340157

0

.NETではAnyCPUをターゲットとして使用できます。これは、同じ実行可能ファイルを32ビットと64ビットの両方の実行可能ファイルとして実行できることを意味します。これにより、シナリオが簡単に発生します。アプリケーションの1つはAnyCPUとしてコンパイルされ、もう1つは32ビットとしてコンパイルされます。 DLLが32ビットの場合、32ビットアプリケーションのみが動作します。 DLLが64ビットの場合、AnyCPUアプリケーションだけが動作します。これは他のコンピュータでも動作するので、DLLは32ビットで、Win7とWin2k3のPCは32ビットなので、両方のアプリケーションが32ビットとして動作することが最善の方法です。

タスクマネージャでプロセスが32ビットまたは64ビットとして実行されているかどうかを確認できます.32ビットプロセスの場合は、*32の接尾辞が付いています。

関連する問題