2013-07-29 38 views
6

Tôi đang sử dụng các phần mở rộng Phản ứng trong ứng dụng WPF của mình. Và trong khi sử dụng nó tôi nhận được dưới đây tham khảo mơ hồ lỗi.Lỗi tham chiếu mơ hồ IObservable

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

Tôi đã thử với tên đủ điều kiện và cũng đã thử this url, nhưng không nhận được bất kỳ may mắn nào. Tôi đang sử dụng phiên bản .NET 4.0 của Tiện ích mở rộng phản ứng.

Mã của tôi:

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

Bất kỳ ý tưởng làm thế nào tôi có thể giải quyết này?

Cảm ơn

+3

Lỗi khá tự giải thích. Bạn có 2 thư viện mà cả hai đều có định nghĩa 'IObservable' để bạn phải làm rõ cái nào bạn đang cố gắng sử dụng. –

+0

Cả hai đều trong không gian tên "Hệ thống", và trong cùng một hình thức tôi đang sử dụng hệ thống từ mscorlib cũng cho EventHandlers và tất cả. Vì vậy, làm thế nào tôi có thể cung cấp tên đầy đủ điều kiện ở đây cho IObservable? Nếu tôi sử dụng System.IObservable thì nó sẽ lại cho tôi lỗi tham chiếu mơ hồ. –

+0

Bạn không có thêm 'bằng cách sử dụng System.Reactive;' ở đó đâu đó? –

Trả lời

5

Khi bạn tham khảo IObservable, hoặc sử dụng

System.Reactive.IObservable<T> 

hoặc

System.IObservable<T> 

CẬP NHẬT >>>

Ahhhh, bây giờ mà bạn đã thêm hình ảnh, Tôi thấy vấn đề của bạn. Bạn có hai lớp System.IObservable ... những kẻ ngốc đó là những kẻ phản ứng!

Dù sao, hãy nhìn vào những bài viết:

How to access a type with same fully qualified name in 2 different DLLs

Extern alias walkthrough

Nó không đẹp, nhưng nó sẽ giúp bạn.

+0

Đó không phải là lý do ... anh ta phải tham khảo các phiên bản sai sau khi nâng cấp hoặc một cái gì đó. @JimWooley đúng. Gọi người ngốc, đặc biệt là khi họ không, là không phù hợp. –

7

Khi bạn nói bạn đang sử dụng phiên bản .Net 4 của Rx, bạn đang sử dụng phiên bản Rx nào? 1.1 hoặc 2.x? Nếu sử dụng 2.x, bạn không nên tham chiếu đến System.Reactive, mà là System.Reactive.Core. Tôi nghi ngờ bạn đã nâng cấp dự án này từ .Net 3.5 nhưng không cập nhật tất cả các tài liệu tham khảo cần thiết của bạn. Đảm bảo rằng phiên bản Rx bạn đang sử dụng không dành cho Silverlight 4 hoặc .Net 3.5 (không có IObservable/IObserver trong lõi). Có thể dễ dàng nhất nếu bạn chỉ cần loại bỏ các tham chiếu đến phản ứng và có nuget thêm lại chúng cho bạn bằng cách sử dụng phiên bản Reactive Extensions - WPF Helpers phiên bản. Lưu ý: Bạn có thể cần phải thay đổi nhập khẩu của bạn cho các lớp bằng cách sử dụng Rx để nhập System.Reactive.Linq nếu bạn đang sử dụng phiên bản cũ hơn có các phương thức mở rộng trong không gian tên System.Linq cũ hơn.

+0

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

Các vấn đề liên quan