Ошибка неоднозначной ссылки IObservable

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

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

введите здесь описание изображения

Есть идеи, как я могу это решить?

Спасибо


person Mukesh Rawat    schedule 29.07.2013    source источник
comment
Ошибка довольно понятна. У вас есть 2 библиотеки, обе из которых имеют определение IObservable, поэтому вам нужно уточнить, какую из них вы пытаетесь использовать.   -  person Kevin DiTraglia    schedule 29.07.2013
comment
Оба находятся в пространстве имен System, и в той же форме я использую System из mscorlib также для обработчиков событий и всего остального. Итак, как я могу дать здесь полное имя для IObservable? Если бы я использовал System.IObservable, это снова дало бы мне неоднозначную ошибку ссылки.   -  person Mukesh Rawat    schedule 29.07.2013
comment
У вас нет где-нибудь лишнего using System.Reactive;, не так ли?   -  person Kevin DiTraglia    schedule 29.07.2013
comment
@Kevin, нет, у меня нет дополнительного объявления System.Reactive в моей форме.   -  person Mukesh Rawat    schedule 29.07.2013


Ответы (2)


Когда вы ссылаетесь на IObservable, используйте либо

System.Reactive.IObservable<T>

or

System.IObservable<T>

ОБНОВЛЕНИЕ>>>

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

В любом случае, взгляните на эти сообщения:

Как получить доступ к введите одно и то же полное имя в двух разных DLL

Пошаговое руководство по внешнему псевдониму

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

person Sheridan    schedule 29.07.2013
comment
Это не причина ... он должен ссылаться на неправильные версии после обновления или что-то в этом роде. @ДжимВули прав. Называть людей идиотами, особенно когда это не так, неуместно. - person DoctorFoo; 30.07.2013

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

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

person Jim Wooley    schedule 29.07.2013