479

私には2つのプロジェクトがProjectAありProjectBます。 ProjectBに依存するコンソールアプリケーションですProjectA。昨日はすべて正常に機能していましたが、今日実行すると突然次のようProjectBになります。

BadImageFormatExceptionが処理されませんでした:
ファイルまたはアセンブリ'ProjectA、Version = 1.0.0.0、Culture = neutral、PublicKeyToken=null'またはその依存関係の1つを読み込めませんでした。間違った形式のプログラムを読み込もうとしました。

どちらも単なる通常のプロジェクトであり、他の非.Netプロジェクトに依存することはありません。どちらも完全に.Netです。ネイティブコードもP/Invokeもありません。私は他のプロジェクトに依存していてProjectA、それでもうまく機能しています。

私が試したこと:

  • ビルドチェックボックスがオンになっている状態で、両方のプロジェクトが「任意のCPU」に設定されていることを確認します。彼らです。
  • 両方のプロジェクトが同じターゲットフレームワーク(.Net 4.0クライアントプロファイル)用であることを確認してください。
  • ProjectB-> References-> ProjectA-> Propertiesで、「CopyLocal」が「True」に設定されていることを確認します_ (ProjectA.dllが正しくコピーされていることを確認しました)
  • ソリューションをクリーンアップ/再構築します。両方のプロジェクトで/binフォルダーと/objフォルダーを手動で削除してみました。
  • VisualStudioを再起動します。コンピューターを再起動します。
  • リポジトリのまったく新しいコピーをチェックしてください。

しかし、それでも同じエラーが発生します。私はこれを引き起こすために私が何をしたのか、そしてそれをどのように修正するのか分かりません。何か案は?

4

29 に答える 29

747

32 ビット / 64 ビットの競合が発生していると確信しています。メイン プロジェクトが 32 ビットに設定され、参照しているクラスが 64 ビットに設定されているようです。this SO questionthis one tooを見てみてください。それらの 2 つの間で、問題を把握できるはずです。

于 2012-07-07T01:47:49.527 に答える
231

サーバーにデプロイした後、Web サイトで問題に直面している可能性があります。

次に、アプリケーション プールをEnable 32-Bit Applicationsに調整する必要があります。

手順

  1. IIS マネージャーを開く
  2. [アプリケーション プール] をクリックします。
  3. 使用しているアプリケーション プールを選択します
  4. 右側のペインから、[詳細設定...] をクリックします。

  5. 32 ビット アプリケーションを有効にするを True に設定します。

    高度な設定 32 ビットを有効にする

于 2013-12-11T17:00:50.310 に答える
165

Visual Studio 2015 で IIS Express を実行すると、このエラー メッセージが表示されました。私の場合、64 ビット バージョンの IIS Express を実行する必要がありました。

[ツール] → [オプション] → [プロジェクトとソリューション] → [Web プロジェクト
] [Web サイトとプロジェクトに 64 ビット バージョンの IIS Express を使用する] チェックボックスをオンにします。

スクリーンショット:

Web プロジェクトの VS オプションのスクリーンショット。

于 2016-06-06T20:09:37.820 に答える
37

私はこれと同じ問題を抱えていました。プロジェクト A の「プラットフォーム ターゲット」(「プロジェクト A」(右クリック)->プロパティ->ビルド->「プラットフォーム ターゲット」) を x86 に設定しましたが、プロジェクト B は「任意の CPU」のままにしました。プロジェクト B を「x86」に設定すると、これが修正されました。

于 2013-04-18T16:23:37.090 に答える
9

プロジェクトに少なくとも 1 つの 32 ビット dll\exe がある場合は、IIS7 でアプリケーションプール設定の [32 ビット アプリケーションを有効にする] を TRUE に変更する必要がある場合があります。

于 2013-12-06T16:31:06.657 に答える
3

同じソリューションの複数のプロジェクトで同じ問題が発生しました。最終的にすべてのターゲット フレームワークをターゲット CPU の .NET Framework 4 および x86 に設定し、最終的に正常にコンパイルしました。

于 2013-08-07T01:24:37.470 に答える
2

Visual Studio の新しいバージョン (この回答では v16.10) では、ソリューション プラットフォームを手動で変更することで修正できます。私にとっては、「Any CPU」から「x86」に変更した後に機能しました。

  1. ソリューション プラットフォームのドロップダウンをクリックします。下の画像では、CPU が表示されています。 ここに画像の説明を入力

  2. 構成マネージャーに移動します。

    ここに画像の説明を入力

  3. 新規をクリックし、何が機能しているかに基づいて、プラットフォーム x86 または x64 (32 または 64 ビット) を追加します。 ここに画像の説明を入力

  4. プロジェクトを再起動します。

于 2021-06-01T17:57:17.537 に答える
1

これは、サポートされている複数のフレームワークを app.config ファイルで定義し、app.configファイルで最初に記述されたフレームワーク以外の別の .NET フレームワークでアプリを強制的に実行することによっても発生する可能性があります。

また、これは、前述の両方のフレームワークがシステムで利用可能な場合に発生します。

回避策として、デバッグに使用するターゲット フレームワークを app.config で起動します。

例: .NET 4 で実行しようとしている場合、構成ファイルには次のようなものが含まれている必要があります。

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
于 2016-08-30T10:18:38.093 に答える
1

C# の私のプロジェクトでは、プロジェクト プロパティ -> [ビルド] -> プラットフォーム ターゲット: 任意の CPU を選択し、[32 ビットを優先してコンパイラが自動的に選択できるようにする] のチェックを外します。

于 2017-01-03T01:58:16.063 に答える
0

少しおかしいかもしれませんが、通常の作業コードでも同じ問題がありました。StreamWriter と StreamReader を追加したところ、そのエラーが発生しました。解決策は、そのコードをコメントブラケットに入れてデバッグし、再び機能し始めたことです

于 2015-10-21T18:55:12.763 に答える