2016-07-09 3 views
0

Rxからかなり簡単なプロジェクトで例外が発生することに困惑しています。System.Reactive.Core.dllのBadImageFormatException

私はBadImageFormatExceptionを検索し、プラットフォーム固有のアセンブリが互換性のないプロセスにロードされようとしたときにスローされることを発見しました。

私のプロジェクトのプラットフォーム設定は「任意のCPU」ですが、System.Reactive.Core.dll自体もあまりにも明らかです。

スタックトレースのトップは、Rxのである:

enter image description here

protected override void OnNextCore(T value) 
    { 
     _onNext(value); 
    } 

_onNextを読んでいるソースがAction<...>ています。

私の直ちに問題となるのは、どのアセンブリが実際に読み込まれないのかを知る方法がわからないということです。情報は例外的なものではなく、どちらから取得するのかわかりません。

Rxについては実際には何も考えていませんが、それは何ですか?

誰でもいいですね。

EDIT 1:

は、ここで私は例外から取得していますスタックトレースと一緒に、「すべてのバインディングを表示する」に設定した非デバッガの実行でfuslogvw-をした結果、です。失敗したバインディングのみを表示するようにfuslogvwを設定すると、何も表示されません。

enter image description here

EDIT 2:

私はまた、「32ビットを好む」ことを確認した私からしているすべてのアセンブリ、特にメインコンソールアプリでオフに設定されています。

EDIT 3:

絶対に不可解:私は今、解決策を決裂RXなど、すべての依存関係を削除し、コピー&ペーストソースをまっすぐに、ウィザードのうち、すべてのプロジェクトとの新しいソリューションに - それはまだですハプニング。

まだ2台のマシンで試してみましたが、まだ起こっています。

これは何ですか?

私は私の絶望、ここにソースです。おそらく私よりも賢く、誰かが十分に好奇心旺盛です:

source code

答えて

1

は(と私は常に意味するものではありません)、BadImageFormatExceptionは、アセンブリが破損または「bit化」のいずれかであるとき(すなわち、32ビット、64ビット)が異なる場合にスローされます換言すれば、実行アセンブリは、ロードされるアセンブリとは異なる「ビット」に対してコンパイルされる。

Visual Studioでは、Any CPUオプションを選択しても、Prefer 32 bitが設定されているかどうかを確認します。アプリケーションにコンパイルされている32ビットと64ビットのアセンブリが混在している可能性もあります。

Prefer 32 bitフィールドに関する詳しい情報は、これを参照してください:あなたのアセンブリをチェックする What is the purpose of the "Prefer 32-bit" setting in Visual Studio 2012 and how does it actually work?

もう一つの方法は、あなたの.NETアセンブリについての詳細を教えてくれますAssembly Informationと呼ばれる便利なツールをダウンロードしてインストールすることです。

+0

これは実際に有効になっていましたが、設定を解除しても何も変更されませんでした。アセンブリ情報は素晴らしいですが、不思議なことに、 "32ビットを好む"とコンパイルされたアセンブリを開くことができないようです。まだ何が起こっているかについての手掛かりはありません。私はすべてを一からコンパイルしたことを確認しました。 – John

+0

それから、他のどのプラットフォームをターゲットにすることができるのでしょうか?おそらく、Windowsデスクトップ用ではなく、モバイル用などの.NETでコンパイルされているのでしょうか? –

+0

フレームワークは4.5.2で、コンソールアプリケーションです。 – John

関連する問題