ファイルまたはアセンブリを読み込めませんでした…不正な形式のプログラムを読み込もうとしました(System.BadImageFormatException)


409

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の下で- >参照は- > PROJECTAは- >プロパティは、確認して「ローカルコピーは」に設定されている「真」 _ (私はProjectA.dllが正しくコピーされていることを確認し)
  • ソリューションをクリーン/再構築します。両方のプロジェクトで/ binと/ objフォルダーを手動で削除してみました。
  • Visual Studioを再起動します。コンピュータを再起動します。
  • リポジトリの完全に新しいコピーをチェックしてください。

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


1
リポジトリにバージョン履歴がある場合、csprojファイルにいくつかの違いがあるかどうかを確認できますか?
Steve

@Steve:Mercurialによると、新しい.csファイルへの参照を追加する以外に変更はありません
BlueRaja-Danny Pflughoeft

別のマシンで同じ動作をしますか?マシンで他に何か変更されましたか(Windowsの更新、依存関係の更新など)?
Mike Parkhill、2012

これらの新しい.csファイルを元に戻してみましたか?
Mike Parkhill、2012

2
これは私のために働きました............ stackoverflow.com/a/9419522/191403
Som

回答:


647

32ビットと64ビットの競合が発生していると思います。参照しているクラスが64ビットに設定されているときに、メインプロジェクトが32ビットに設定されているようです。このSOの質問これも見てみてください。それらの2つの間で、問題を理解できるはずです。


71
ええ。「プラットフォームターゲット」ドロップダウンがどういうわけか完全に欠落していますproject-->properties-->build-これはx86用に設定されていました。「すべてのCPU」に設定すると、この問題は修正されました。この設定は構成マネージャーの「プラットフォームターゲット」ドロップダウンと同じだといつも思っていましたが、明らかにそうではありません(実際、構成マネージャーの「プラットフォームターゲット」は何もしないようです!)
BlueRaja -ダニーPflughoeft

10
また、プロジェクトが「優先32ビットがチェックされているCPU」ではないことを確認します。プロジェクト->プロパティ->ビルド
Reid Evans

26
PS:別の理由は、アプリプールの設定で「32ビットアプリケーションを有効にする」が「false」になっていることです。IISをtrueに設定した後、IISを再起動する必要があります。
dvdmn 2014年

3
このエラーで私に起こった最悪の事態は、VSが<PlatformTarget>x86</PlatformTarget>理由もなく依存プロジェクトの1つを追加することを決定したときでした。SVNを調べていなければ、MVCアプリが起動しない理由を理解できなかったでしょう。
ジャフ2015

1
IIS DefaultAppPoolで設定してください
Shantu

195

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

次に、アプリケーションプールを調整して32ビットアプリケーション有効にする必要があります

手順

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

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

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


1
私は何か見落としてますか?OPはIISの展開ではなくコンソールアプリについて話している:「ProjectBはProjectAに依存するコンソールアプリケーションです」
MickyD

129

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

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

スクリーンショット:

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


2
反対が当てはまります。「64ビットを使用」にチェックを入れ、チェックを外す必要がありました...
cjb110

32

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


15

Visual Studio 2015でユニットテスト(xunit)を実行するときにこの問題が発生し、次の修正に遭遇しました。

Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64

7

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


OPはIISではなくコンソールアプリについて話している
MickyD

5

まず、VS2017で古いプロジェクトを使用してこれを取得しました。すべてのプロジェクトに小さな変更を加えてフレームワーク4.7にアップグレードする必要がありました。


他のいくつかは、選択Any CPUするとこの問題を修正できると述べています。

実行する必要のある場所がいくつかあり、ドロップダウンから選択するだけの簡単なものではない場合があります。これは私のためにそれを修正しました:

1)ここで両方行う必要があります:

ここに画像の説明を入力してください

2)そしてまたConfiguration Manager(ソリューションを右クリック)

ここに画像の説明を入力してください

しかし、それが存在しない場合はどうなりますか?

次にNew、これらの設定をクリックして選択します:(@RckLNに感謝

ここに画像の説明を入力してください


2

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


1
リリースでは機能しましたが、デバッグに失敗しました。すべてを.Net Framework 4(Update 1ではない)に設定すると、デバッグが実行されます。
DCastenholz 2016年

2

VSでMSIインストーラーを使用して64ビットプロジェクトをパッケージ化しようとした場合にも、この問題が発生することがあります。(「理由は、.msiファイルと一緒にパッケージ化されたネイティブシムが32ビット実行可能ファイルであるためです。」)

詳細については、こちらをご覧ください:http : //blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx


1
将来の読者のために、リンクされた記事を要約することを検討してください。リンクが停止した場合。
ボンド

2

これらの解決策はどれもうまくいきませんでしたが、binおよびobjフォルダーの内容を削除することで、すべてが再びクールになりました。


2

Visual Studio Buildステップを使用してVisual Studio Online(VSTS)ビルドを介してプロジェクトをビルドするときに、これを取得しました。

解決策は:

  • 既存のソースフォルダを削除する
  • 依存関係を含むすべてのVisual Studioビルドのプラットフォームで、「任意のCPU」を明示的に設定します(下のスクリーンショットを参照)。
  • ビルドを再実行します

VSOスクリーンショット


2

次は私のために問題を解決しました、「32ビットを優先する」のチェックを外します: ここに画像の説明を入力してください


1

同じ問題が発生しました。それは突然現れ、それは私には奇妙に思えました。

例外のスナップショットで、FusionLogの場合、メッセージ内に次のことがわかりました。

... C:\ Windows \ Microsoft.NET \ Framework64 ...

フュージョンログの詳細:http : //msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx

すべてのプロジェクトのターゲットCPUはAnyCPUでした。アプリケーションプロジェクト(他のすべてのプロジェクトを参照するプロジェクト)をx86のターゲットCPUに変更しました。これで動作します。

明確な理由もなく、ターゲットCPUの混同がどのように発生したかはわかりませんが、実際に発生しました。


1

私もプロジェクトでこの問題に直面し、数分後に解決策を見つけました、この問題はCPU構成が原因です。VisualStudio 2010またはVS 2013を使用している場合は、プロジェクトのプロパティに移動し、サイドバーから[ コンパイル]を選択します5つのドロップダウンがあり、5番目のドロップダウンはターゲットCPUになります:x86またはx64に設定する必要があります要件の代わりに、任意のCPUによります。

x86に変更すると問題は解決しました。


1

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

また、システムで前述の両方のフレームワークを使用できる場合にも、このイベントが発生します。

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

例:.NET 4で実行しようとする場合、構成ファイルは次のようになります。

<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>

1

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


1

Chilkat .NET 4.5アセンブリでは、アプリケーションを実行するすべてのコンピューターにVC ++ 2012または2013ランタイムをインストールする必要があります。ほとんどのコンピュータにはすでにインストールされています。Visual Studioがインストールされているため、開発用コンピューターにインストールされます。ただし、必要なVC ++ランタイムが使用できないコンピューターに展開すると、上記のエラーが発生します。

以下のパッケージをすべてインストールします

Visual Studio 2013用のVisual C ++再頒布可能パッケージ-vcredist_x64

Visual Studio 2013用のVisual C ++再頒布可能パッケージ-vcredist_x86

Visual Studio 2012用のVisual C ++再頒布可能パッケージ-vcredist_x64

Visual Studio 2012用のVisual C ++再頒布可能パッケージ-vcredist_x86


1

私のように cli .net統合を介してプログラムからLibreOfficeを使用すると、同じエラーが発生します。PCの本番環境で古いバージョンのLibreOfficeを使用していますが、競合する新しいバージョンをインストールしました。LibreOfficeをアンインストールするだけです。私はここに解決策を見つけました .NET CLI:ファイルまたはアセンブリ 'cli_cppuhelper'をロードできませんでした


0

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



0

私の場合、この例外をスローするDLLに依存関係がありませんでした。Dependency Walkerで確認し、足りないDLLを追加して問題を解決しました。

より具体的には、誤ってopencv_core340.dllに破損し、誤ってSVNキーワードを追加したため、dllで使用できなくなりました。ただし、この問題の解決策は、dllが破損しているか欠落しているかによって異なるとは思いません。完全な情報を提供するために、これを追加しています。


0

シュート!私はこの問題を知っていました。VS出力ウィンドウで誤って「x86」が表示されるまで、すべてを正しく行っていたと思いました。そのとき、原因を突き止めました。今日は数分を無駄にしました。

「公開」ウィンドウの設定は「x86」に設定されていました。一方、それ以外の場所では、「x64」でした。

構成マネージャー、発行設定、ソリューション構成、およびIIS設定(Webサーバーの場合)全体で同期していることを確認してください。

また、覚えておいてください-VSは32ビットアプリで、IISは64ビットアプリです。IISでは、32ビットアプリはデフォルトで無効になっています。

ここに画像の説明を入力してください


0

他の回答とは異なるものを検出しました。私のプロジェクトでこの例外に達したのは、不正なコンパイルの結果でした。何も変更せずに、再構築を強制するだけで修正されました。


0

同じ問題がありました。私の場合、プロジェクトBはNuget "Microsoft.Management.Infrastructure"がインストールされた.Netコアクラスライブラリでした。エラーは、プロジェクトBを「MI」と呼んだことです。プロジェクト名を別の名前に変更したところ、突然すべてが正常に機能しました。


-1

私のマシンにはBIOSアップデートが表示されましたが、それがこのエラーの突然のポップアップと関係があるのではないかと思いました。そして、更新を行った後、エラーは解決され、ソリューションは正常に構築されました。


-1

コマンドから.exeファイルを実行しようとしていますか?これは私の間違いでした。.exeファイルをダブルクリックして実行するだけです。Windows 8.1 / Windows Server 2012 R2 x64の.NET Core SCDの場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.