2013-07-29 37 views
6

Używam rozszerzeń reaktywnych w mojej aplikacji WPF. I podczas korzystania z niego dostaję poniżej niejasnego błędu referencyjnego.Niepoprawny błąd referencyjny IObservous

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

Próbowałem z pełną nazwą również i spróbował this url jak dobrze, ale nie mieli szczęścia. Używam wersji Reaktywnych rozszerzeń .NET 4.0.

mój kod:

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

Jakiś pomysł jak mogę rozwiązać ten problem?

Dzięki

+3

Błąd jest dość oczywisty. Masz dwie biblioteki, które mają definicję "IObservable", więc musisz wyjaśnić, której z nich chcesz użyć. –

+0

Oba są w przestrzeni nazw "System" iw tej samej formie używam System od mscorlib także dla EventHandlers i wszystkich. Więc w jaki sposób mogę podać pełną nazwę dla IObservable? Gdybym użył System.IObservable, to ponownie dałby mi niejednoznaczny błąd referencyjny. –

+0

Nie masz dodatkowego "using System.Reactive;" gdzieś tam jesteś? –

Odpowiedz

5

Kiedy można odwołać IObservable, albo użyć

System.Reactive.IObservable<T> 

lub

System.IObservable<T> 

UPDATE >>>

ahhhh, że teraz dodasz zdjęcie, Widzę twój problem. Masz dwie klasy System.IObservable ... jakie idioci mają reaktywni faceci!

Zresztą spójrz na tych stanowiskach:

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

Extern alias walkthrough

To nie jest ładna, ale powinno pomóc.

+0

To nie jest powód ... musi odnosić się do niewłaściwych wersji po aktualizacji lub coś podobnego. @JimWooley ma rację. Nazywanie ludzi idiotami, zwłaszcza gdy nie są, jest niewłaściwe. –

7

Kiedy mówisz, że używasz wersji Rx z .Net 4, której wersji Rx używasz? 1.1 lub 2.x? Jeśli używasz wersji 2.x, nie powinieneś mieć odniesienia do System.Reactive, a raczej System.Reactive.Core. Podejrzewam, że zaktualizowałeś ten projekt z .Net 3.5, ale nie zaktualizowałeś wszystkich potrzebnych referencji. Upewnij się, że wersja Rx, której używasz, nie jest przeznaczona dla Silverlight 4 lub .Net 3.5 (które nie miały IObservable/IObserver w rdzeniu).

To może być najłatwiejsze, jeśli po prostu usuniesz odniesienia do reaktywnego, a nuget ponownie je doda, korzystając z wersji Pomocniczych rozszerzeń - Pomocników WPF. Uwaga: Konieczna może być zmiana importu dla klas za pomocą Rx, aby zaimportować plik System.Reactive.Linq, jeśli używasz starszej wersji, która ma metody rozszerzenia w starszej przestrzeni nazw System.Linq.

+0

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

Powiązane problemy