2013-06-26 27 views
7

Điều này rất kỳ quặc.Các vấn đề lạ với RX trên .NET 4.5 và F #

Tôi có hai dự án cả F #. Tôi đã cài đặt bản phát hành ổn định mới nhất (2.1.30214.0) của RX qua NUGET.

Trong mọi dự án, mọi thứ đều hoàn toàn ổn. Trong dự án khác tôi về cơ bản nhận được lỗi ở khắp mọi nơi vì sau đây.

Error 1 The type 'IObservable`1' is required here and is unavailable. 
      You must add a reference to assembly 'System.Runtime, Version=4.0.0.0, 
      Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.` 

Điều này thực sự không có ý nghĩa vì nguồn là tốt và hoạt động hoàn hảo trong VS2010.

Mọi đề xuất?

+0

Làm một diff trên các tập tin .fsproj! Đặc biệt so sánh danh sách '' –

+0

Tôi đã gặp phải cùng một vấn đề ngày hôm nay. Về cơ bản, tôi có những vệt đỏ khắp nơi, nhưng điều kỳ lạ là chúng biến mất khi tôi biên dịch.Mã của tôi vẫn biên dịch và chạy, nhưng ngay sau khi tôi trở lại trong trình soạn thảo, các squigglies xuất hiện trở lại. –

Trả lời

1

Điều này xảy ra khi bạn tham chiếu 4.5 DLL trong dự án 4.0 hoặc ngược lại. Đảm bảo bạn đang tham khảo đúng phiên bản.

+0

Chắc chắn là một dự án 4.5. Tôi đã hướng dẫn nuget để cài đặt cho 2 dự án, cả hai đều là 4.5. Một công trình, một không. Cố gắng tái tạo chúng từ đầu là tốt. Có cái gì tôi có thể nhìn vào trong tập tin dự án để kiểm tra lại? – Dave

+1

Kiểm tra tệp fsproj của bạn. Tôi đã có cùng một vấn đề và phải chỉnh sửa thủ công tệp dự án. Bạn có thể thêm .. \ packages \ Rx-Core.2.1.30214.0 \ lib \ Net45 \ System.Reactive.Core.dll

+0

Nhấp vào tham chiếu System.Reactive.Linq, nhấn F4, nhìn vào đường dẫn và đảm bảo nó Có Net45 trong nó –

2

Tôi có vấn đề này quá, tôi cố định nó bằng cách chỉnh sửa và thay thế fsproj Net45 với Net40 trong tất cả các đường dẫn dll phản ứng. Điều này là cần mặc dù những điều sau đây trong tập tin fsproj tôi:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

Original câu trả lời:

sửa chữa trước đó tôi đã biên dịch dự án nhưng tôi không thể sử dụng RX (khá vô nghĩa) nhưng dưới đây.

Các lỗi đang đến từ dòng:

open System 

Bây giờ tôi có:

//open System 
type Array = System.Array 
type Double = System.Double 
type TimeSpan = System.TimeSpan 

Tất cả các công trình! Mặc dù khủng khiếp xấu xí, và nó ảnh hưởng đến tất cả các tệp trong dự án.

+2

+1 Thay đổi đường dẫn gợi ý cho Net40 cũng làm việc cho tôi, mặc dù nó không cảm thấy an toàn để làm như vậy: (Tôi đào một ít vào gói NuGet, và phát hiện ra rằng các tệp nhị phân Net40 là 'true'. Có vẻ như các dự án F # 4.5 không thích tham khảo các thư viện di động ... –

+0

FWIW, tôi đã thêm vấn đề này trên trang dự án Rx: https: //rx.codeplex. com/workitem/47 –

7

Như đã lưu ý bởi @Mark Seemann, vấn đề xuất phát từ thực tế là gói Rx NuGet cho .NET 4.5 thực sự là một thư viện di động.

Thật không may, F # 3.0 không hỗ trợ thư viện di động .NET 4.5, chỉ các thư viện cũ. Hỗ trợ cho các thư viện di động mới hơn (còn gọi là thư viện dựa trên .NETCore) đã được thêm vào trong VS 2013.

Vì vậy, bạn có 2 lựa chọn:

  • Xây dựng mục tiêu Release45 hoặc Debug45 của Rx.sln trong Rx open-source release và sử dụng rằng thay vì các gói Rx NuGet.

  • Sử dụng F # 3.1 trong đó có sẵn trong Visual Studio 2013.

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