6

WPF アプリケーションで Reactive 拡張機能を使用しています。そして、それを使用している間、あいまいな参照エラーを下回っています。

The type 'System.IObservable<T>' exists in both 'mscorlib.dll' and 'System.Reactive.dll'

完全修飾名でも試し、このURLも試しましたが、うまくいきませんでした。Reactive Extensions の .NET 4.0 バージョンを使用しています。

私のコード:

using System; // mscorlib.dll
using Rx = System.Reactive;

public Rx.IObservable<int> BytesReceived { get { return _bytesReceivedSubj; } } // Not valid as IObservable is in System namespace of System.Reactive.

public IObservable<int> BytesReceived { get { return _bytesReceivedSubj; } } // With this I'm getting ambiguous reference error

ここに画像の説明を入力

どうすればこれを解決できますか?

ありがとう

4

2 に答える 2

8

Rx の .Net 4 バージョンを使用していると言う場合、どのバージョンの Rx を使用していますか? 1.1 または 2.x? 2.x を使用している場合は、System.Reactive への参照ではなく、System.Reactive.Core への参照が必要です。このプロジェクトを .Net 3.5 からアップグレードしたと思われますが、必要な参照のすべてを更新していません。使用している Rx のバージョンが、Silverlight 4 または .Net 3.5 (コアに IObservable/IObserver が含まれていない) 用ではないことを確認してください。

Reactive への参照を削除し、Reactive Extensions - WPF Helpers バージョンを使用して nuget に再度追加させると、最も簡単な場合があります。注: 古い System.Linq 名前空間に拡張メソッドが含まれていた古いバージョンを使用している場合は、Rx を使用して System.Reactive.Linq をインポートするクラスのインポートを変更する必要がある場合があります。

于 2013-07-29T17:45:02.330 に答える
5

を参照するときはIObservable、どちらかを使用します

System.Reactive.IObservable<T>

また

System.IObservable<T>

更新>>>

ああ、画像を追加したので、問題がわかりました。あなたは 2 つの System.IObservable クラスを持っています...それらの Reactive 連中はなんてばかです!

とにかく、これらの投稿を見てください:

2 つの異なる DLL で同じ完全修飾名を持つ型にアクセスする方法

外部エイリアスのチュートリアル

きれいではありませんが、役立つはずです。

于 2013-07-29T16:10:58.557 に答える