Я использую реактивные расширения в своем приложении 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

Есть идеи, как я могу это решить?
Спасибо
Ответ 1 · рейтинг 5 · Sheridan
Когда вы ссылаетесь на IObservable, используйте либо
System.Reactive.IObservable<T>
or
System.IObservable<T>
ОБНОВЛЕНИЕ>>>
Аааа, теперь, когда вы добавили изображение, я вижу вашу проблему. У вас есть два класса System.IObservable... какие идиоты эти реактивные ребята!
В любом случае, взгляните на эти сообщения:
Как получить доступ к введите одно и то же полное имя в двух разных DLL
Пошаговое руководство по внешнему псевдониму
Это некрасиво, но должно вам помочь.
Ответ 2 · рейтинг 8 · Jim Wooley
Когда вы говорите, что используете версию 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.