6

I'm using Reactive extensions in my WPF application. And while using it I'm getting below ambiguous reference error.

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

I tried with fully qualified name also and tried this url as well, but didn't get any luck. I'm using .NET 4.0 version of 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

Any idea how can i resolve this?

Thanks

4

2 回答 2

8

当您说您使用的是 .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)。

如果您只是删除对响应式的引用并让 nuget 使用 Reactive Extensions - WPF Helpers 版本为您重新添加它们,这可能是最简单的。注意:如果您使用的是在旧 System.Linq 命名空间中具有扩展方法的旧版本,则可能需要使用 Rx 更改类的导入以导入 System.Reactive.Linq。

于 2013-07-29T17:45:02.330 回答
5

当您引用IObservable时,请使用

System.Reactive.IObservable<T>

或者

System.IObservable<T>

更新>>>

啊,现在您已经添加了图像,我看到了您的问题。你有两个 System.IObservable 类......那些反应型的家伙是什么白痴!

不管怎样,看看这些帖子:

如何在 2 个不同的 DLL 中访问具有相同完全限定名称的类型

外部别名演练

它不漂亮,但它应该可以帮助你。

于 2013-07-29T16:10:58.557 回答