2013-07-29 50 views
6

我在我的WPF应用程序中使用Reactive扩展。而使用它时,我得到低于模糊的参考错误。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

错误是不言自明的。你有两个库都有'IObservable'的定义,所以你必须澄清你正在尝试使用哪一个库。 –

+0

两者都在“系统”命名空间中,并且以同样的形式使用mscorlib中的System也用于EventHandlers和全部。那么我怎么能给IObservable的完全限定名称?如果我使用System.IObservable,那么它会再次给我模棱两可的引用错误。 –

+0

你在那里没有额外的'使用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)。

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

+0

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