2013-06-26 2 views
7

Это очень странно.Странные проблемы с RX на .NET 4.5 и F #

У меня есть два проекта как F #. Я установил последнюю версию стабильной версии (2.1.30214.0) RX через NUGET.

В проекте все абсолютно нормально. В другом проекте я в основном получаю ошибки везде из-за следующего.

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'.` 

Это действительно не имеет смысла, поскольку источник прекрасно работает и отлично работает в VS2010.

Любые предложения?

+0

сделать диф на .fsproj файлы! Особенно сравнить список '' –

+0

Я столкнулся с той же проблемой сегодня. В принципе, у меня есть красные squigglies повсюду, но странно, что они уходят, когда я скомпилирую.Мой код все еще компилируется и запускается, но как только я вернусь в редактор, сквигглы снова появляются. –

ответ

1

Это происходит, когда вы ссылаетесь на 4,5 DLL в проекте 4.0 или наоборот. Убедитесь, что вы ссылаетесь на правильную версию.

+0

Определенно проект 4.5. Я поручил nuget установить на 2 проекта, оба равны 4.5. Один работает, а другой нет. Пробовал снова создавать их с нуля. Есть ли что-то, что я могу посмотреть в файле проекта, чтобы проверить? – Dave

+1

Проверьте файл fsproj. У меня были такие же проблемы, и мне пришлось вручную редактировать файл проекта. Вы можете добавить .. \ packages \ Rx-Core.2.1.30214.0 \ lib \ Net45 \ System.Reactive.Core.dll

+0

Нажмите ссылку System.Reactive.Linq, нажмите F4, посмотрите на путь и убедитесь, что он имеет Net45 в нем –

2

У меня вопрос тоже, я установил ее путем редактирования fsproj и заменяя Net45 с Net40 во всех реакционных путях DLL. Это необходимо, несмотря на следующее в моем fsproj файле:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

Оригинальный ответ:

Мой ранее исправление сделал компиляцию проекта, но я не мог использовать RX (совершенно бессмысленно) но ниже.

Ошибки идут от линии:

open System 

Теперь у меня есть:

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

Все работы! Ужасно уродливый, хотя, и он затрагивает все файлы в проекте.

+2

+1 Изменение пути подсказки к Net40 также сработало для меня, хотя это не кажется безопасным :(Я немного поработал в пакетах NuGet и обнаружил, что бинарные файлы Net40 являются «истинными». NET, а двоичные файлы Net45 - это портативные библиотеки. Кажется, что проекты F # 4.5 не любят ссылаться на портативные библиотеки ... –

+0

FWIW, я добавил эту проблему на сайт проекта Rx: https: //rx.codeplex. ком/WorkItem/47 –

7

Как отмечает @Mark Seemann, проблема связана с тем, что пакет Rx NuGet для .NET 4.5 на самом деле является переносной библиотекой.

К сожалению, F # 3.0 не поддерживает переносные библиотеки на основе .NET 4.5, но только устаревшие. Поддержка новых портативных библиотек (также называемых библиотеками на базе .NETCore) была добавлена ​​в VS 2013.

Итак, у вас есть 2 варианта:

  • Построить цель Release45 или Debug45 из Rx.sln в Rx open-source release и использовать вместо пакетов Rx NuGet.

  • Использование F # 3.1, который доступен в Visual Studio 2013.