私は2つのプロジェクトProjectA
とProjectB
を持っています。 ProjectB
はコンソールアプリケーションで、ProjectA
に依存しています。昨日は、すべてが問題なく動作していましたが、突然今日ProjectB
を実行すると、次のようになります。
BadImageFormatExceptionが処理されませんでした :
ファイルまたはアセンブリ 'ProjectA、バージョン= 1.0.0.0、カルチャ=ニュートラル、PublicKeyToken = null'、またはその依存関係の1つをロードできませんでした。誤った形式でプログラムをロードしようとしました。
どちらも通常のプロジェクトであり、他の非.NETプロジェクトには依存していません。どちらも完全に.NETです。ネイティブコードもP/Invokeもありません。私はProjectA
に依存していてもまだうまく動作する他のプロジェクトを持っています。
私が試したこと
しかし、私はまだ同じエラーが出ます。私はこれを引き起こすために何をしたのか、それをどのように修正するのかわかりません。何か案は?
32ビット/ 64ビットの競合があることは間違いありません。メインプロジェクトが32ビットに設定されていて、その参照先クラスが64ビットに設定されているようです。 this SO question そして これも を見てみてください。それらの2つの間で、あなたはあなたの問題を理解することができるはずです。
サーバーにデプロイした後、Webサイトで問題に直面している可能性があります。
次に、32ビットアプリケーションを有効にするようにアプリケーションプールを調整する必要があります。
ステップ:
私はこれと同じ問題を抱えていました。プロジェクトAの「プラットフォームターゲット」(「プロジェクトA」(右クリック) - >「プロパティ」 - >「ビルド」 - >「プラットフォームターゲット」)をx86に設定しましたが、プロジェクトBは「Any CPU」のままにしました。プロジェクトBを「x86」に設定するとこれが修正されました。
私は、Visual Studio 2015でユニットテスト(xunit)を実行する際にこの問題が発生し、次の修正を見つけました。
Menu Bar -> Test -> Test Settings -> Default Processor Architecture -> X64
プロジェクトに少なくとも1つの32ビットdll\exeがある場合、IIS 7で アプリケーションプール 設定 "32ビットアプリケーションを有効にする"をTRUEに変更する必要があります。
まず第一にVS2017でこれを手に入れたのは、古いプロジェクトで 小さな に変更し、すべてのプロジェクトをフレームワーク4.7にアップグレードすることでした。
他の何人かはAny CPU
を選択することでこの問題を解決できると述べています。
あなたがそれをする必要があるいくつかの場所があります、そしてそれはドロップダウンから選択するほど単純ではないかもしれません。これは私のためにそれを修正しました:
1)あなたはそれを両方ここでする必要があります:
2)Configuration Manager
(解を右クリック)でも
しかし、それがなければどうでしょうか。
それからNew
をクリックして以下の設定を選択してください:( thanks @RckLN )
VSでMSIインストーラを使用して64ビットプロジェクトをパッケージ化しようとしている場合も、この問題が発生する可能性があります。 (「その理由は、.msiファイルに同梱されているネイティブシムが32ビットの実行可能ファイルであるためです。」
詳細についてはこちらを参照してください。 http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx
私は同じソリューションの複数のプロジェクトで同じ問題を抱えていた、私はターゲットCPUのための.NET Framework 4とx86にすべてのターゲットフレームワークを設定することになった、そしてそれは最終的にうまくコンパイルされた。
これらの解決策のどれも私のために働きませんでした - しかし、binとobjフォルダの内容を削除することによってすべてが再びかっこよかったです。
私もプロジェクトでこの問題に直面していますが、数分後に解決策が見つかりました、この問題はCPU構成によるものです、Visual Studio 2010またはVS 201を使用している場合は、プロジェクトに移動してください- プロパティを選択し、サイドバーからコンパイルを選択すると、5つのドロップダウンがあり、5番目のドロップダウンはターゲットCPU:に設定する必要があります要件に応じて、任意のCPUではなくx86またはx64に変更します。
X86に変更した後、私の問題は解決しました。
私のC#プロジェクトでは、プロジェクトプロパティ - > [ビルド] - >プラットフォームターゲット:任意のCPU、およびコンパイラに自動的に選択させるにはPrefer 32-bitのチェックを外してください。
あなたがあなたのプログラムからcli .net統合を介してLibreOfficeを使用している場合私のように、私は同じエラーを受けました。私は私のPC上の実稼働環境でLibreOfficeの古いバージョンを使用しています。競合している新しいバージョンをインストールしました。 LibreOfficeをアンインストールするだけです。 私はここで解決策を見つけました .NET CLI:ファイルまたはアセンブリ 'cli_cppuhelper'を読み込めませんでした
私は同じ問題に遭遇しました。それは青から飛び出して、それは私には奇妙に思えました。
FusionLogの例外スナップショットで、私はそのメッセージの中に次のことを見ました。
... C:\ Windows\Microsoft.NET\Framework64 ...
フュージョンログについての詳細: http://msdn.Microsoft.com/ja-jp/library/e74a18c4(v=vs.110).aspx
すべてのプロジェクトはAnyCPUのターゲットCPUを持っていました。私は、アプリケーションプロジェクト(他のすべてのプロジェクトを参照するプロジェクト)をx86のターゲットCPUに変更しました。それは今うまくいきます。
ターゲットCPUの混同が明白な理由もなく発生したかどうかはわかりませんが、発生しました。
app.config ファイルに サポートされている複数のフレームワーク を定義し、 上記以外の別の.NETフレームワークでアプリケーションを実行するように強制することによっても、これが発生することがありますapp.configファイルの最初の部分 。
そして、これはあなたがあなたのシステムで利用可能な言及されたフレームワークの両方を持っているときにも発生します。
回避策として、app.configでデバッグに使用する予定のターゲットフレームワークを起動します。
例:あなたが.NET 4で走らせようとしているなら、configファイルはこれに類似した何かを持つべきです、
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
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
私はまた、Visual Studio 2017でReSharperを使用してユニットテストを実行することでこの問題を抱えており、以下の設定でそれを修正しました:
また、ReSharperの実行テスト設定を変更することもできます。 https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
シュート!私はこの問題について知っていました。誤ってVSの出力ウィンドウに 'x86'が表示されるまで、私はすべてをうまくやっていたと思いました。それが原因を把握したときです。今日それで数分を無駄にしました。
'Publish'ウィンドウの下の設定は 'x86'に設定されています。それに対して、他のどこでも、それは 'x64'でした。
設定マネージャ、パブリッシュ設定、ソリューション設定、およびIIS設定間で同期されていることを確認してください(Webサーバーの場合)。
また、覚えておいてください - VSは32ビットアプリで、IISは64ビットです。 32ビットアプリケーションは、IISではデフォルトで無効になっています。
それは少し面白いかもしれませんが、私は通常の作業コードで同じ問題を抱えていました。 StreamWriterとStreamReaderを追加したところ、そのエラーが発生しました。解決策は、そのコードをコメントの括弧に入れてからデバッグし、それが再び機能し始めたことです。
私の場合は、この例外を投げたDLLに依存関係がありませんでした。 Dependency Walkerに確認し、足りないDLLを追加して問題を解決しました。
具体的には、SVNキーワードを誤って追加することで、どういうわけか私のopencv_core340.dllを破損させたため、私のdllでは使用できなくなりました。しかし、私はこの問題の解決策は、DLLが破損しているか欠けているかどうかに依存しているとは思わない。完全な情報を提供するためにこれを追加しただけです。