2013-07-29 36 views
6

Uso estensioni reattive nella mia applicazione WPF. E mentre lo sto usando, sto ottenendo un errore di riferimento ambiguo.Errore di riferimento ambiguo IObservable

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

ho provato con nome completo anche e provato this url pure, ma non ha ottenuto alcuna fortuna. Sto usando la versione .NET 4.0 di Reactive Extensions.

My Code:

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 

enter image description here

Qualsiasi idea di come posso risolvere questo?

Grazie

+3

L'errore è abbastanza auto-esplicativo. Hai 2 librerie che hanno entrambe una definizione di IObservable, quindi devi chiarire quale stai cercando di usare. –

+0

Entrambi sono nello spazio dei nomi "Sistema", e nella stessa forma sto usando System da mscorlib anche per EventHandlers e tutti. Quindi, come posso dare qui il nome completo per IObservable? Se ho usato System.IObservable allora mi darà nuovamente un errore di riferimento ambiguo. –

+0

Non hai un extra 'usando System.Reactive;' da qualche parte, vero? –

risposta

5

Quando si fa riferimento IObservable, utilizzare

System.Reactive.IObservable<T> 

o

System.IObservable<T> 

UPDATE >>>

Ahhhh, ora che hai aggiunto l'immagine, Vedo il tuo problema Hai due classi System.IObservable ... che idioti sono quei tipi reattivi!

In ogni caso, dare un'occhiata a questi posti:

How to access a type with same fully qualified name in 2 different DLLs

Extern alias walkthrough

Non è bello, ma dovrebbe aiutare.

+0

Questo non è il motivo ... deve fare riferimento alle versioni sbagliate dopo l'aggiornamento o qualcosa del genere. @JimWooley ha ragione. Chiamare persone idiote, specialmente quando non lo sono, è inappropriato. –

7

Quando dici che stai usando la versione .Net 4 di Rx, quale versione di Rx stai usando? 1.1 o 2.x? Se si utilizza 2.x, non si dovrebbe avere un riferimento a System.Reactive, ma piuttosto System.Reactive.Core. Sospetto che tu abbia aggiornato questo progetto da .Net 3.5 ma non abbia aggiornato tutti i tuoi riferimenti necessari. Assicurati che la versione di Rx che stai utilizzando non sia per Silverlight 4 o .Net 3.5 (che non aveva IObservable/IObserver nel core).

Può essere più semplice se si rimuovono i riferimenti a Reattivo e si aggiunge nuovamente a Nuget utilizzando le estensioni Reactive - Versione WPF Helpers. Nota: potrebbe essere necessario modificare le importazioni per le classi utilizzando Rx per importare System.Reactive.Linq se si utilizza la versione precedente con i metodi di estensione nel precedente spazio dei nomi System.Linq.

+0

https://www.nuget.org/packages/Rx-WPF/ – JensG

Problemi correlati