2013-07-29 3 views
6

Я использую Reactive extensions в моем приложении WPF. И при использовании его я получаю ниже неоднозначную эталонную ошибки.IObservable неоднозначная ошибка ссылки

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

Я попытался с полным именем также и попытался this url, а также, но не получил никакой удачи. Я использую .NET 4.0 версии Reactive Extensions.

Мой код:

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

Любая идея, как я могу решить эту проблему?

Благодаря

+3

Ошибка довольно понятная. У вас есть 2 библиотеки, у которых есть определение 'IObservable', поэтому вам нужно уточнить, какой из них вы пытаетесь использовать. –

+0

Оба находятся в пространстве имен System, и в той же форме я использую System from mscorlib также для EventHandlers и всех. Итак, как я могу дать полное имя здесь для IObservable? Если я использовал System.IObservable, то он снова даст мне двусмысленную ошибку ссылки. –

+0

У вас нет дополнительной 'using System.Reactive;' там где-то есть? –

ответ

5

При ссылке IObservable, либо использовать

System.Reactive.IObservable<T> 

или

System.IObservable<T> 

UPDATE >>>

Ahhhh, теперь, когда вы добавили изображение, Я вижу твою проблему. У вас есть два класса System.IObservable ... какие идиоты для этих реактивных ребят!

Во всяком случае, посмотрите на эти посты:

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

Extern alias walkthrough

Это не красиво, но это должно помочь вам.

+0

Это не причина ... он должен ссылаться на неправильные версии после обновления или что-то в этом роде. @JimWooley прав. Вызывать людей идиотами, особенно когда они не являются, неуместны. –

7

Когда вы говорите, что используете версию .Net 4 Rx, какую версию Rx вы используете? 1.1 или 2.x? Если вы используете 2.x, вам не следует ссылаться на System.Reactive, а скорее на System.Reactive.Core. Я подозреваю, что вы обновили этот проект с .Net 3.5, но не обновили все необходимые ссылки. Убедитесь, что версия Rx, которую вы используете, предназначена не для Silverlight 4 или .Net 3.5 (у которой в ядре не было IObservable/IObserver).

Это может быть проще всего, если вы просто удалите ссылки на реактивные и добавите их повторно для вас, используя версию Reactive Extensions - WPF Helpers. Примечание. Возможно, вам потребуется изменить импорт для классов с помощью Rx для импорта System.Reactive.Linq, если вы используете более старую версию, которая имела методы расширения в старом пространстве имен System.Linq.

+0

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

Смежные вопросы