我在WPF应用程序中使用了Reactive扩展。在使用它的同时,我会遇到模糊的引用错误。
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
我知道如何解决这个问题?
由于
答案 0 :(得分: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。
答案 1 :(得分:5)
当您引用IObservable
时,请使用
System.Reactive.IObservable<T>
或
System.IObservable<T>
UPDATE&GT;&GT;&GT;
啊,啊,现在你已经添加了图像,我看到了你的问题。你有两个System.IObservable类......那些Reactive家伙的白痴!无论如何,看看这些帖子:
How to access a type with same fully qualified name in 2 different DLLs
它不漂亮,但它可以帮助你。