在.NET 4.5和F#上使用RX的奇怪问题

时间:2013-06-26 00:46:04

标签: .net f# system.reactive

这很奇怪。

我有两个项目都是F#。我通过NUGET安装了最新的稳定版(2.1.30214.0)。

在项目中,一切都很好。在另一个项目中,由于以下原因,我基本上都会遇到错误。

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中完美运行。

有什么建议吗?

4 个答案:

答案 0 :(得分:7)

如@Mark Seemann所述,问题源于.NET 4.5的Rx NuGet包实际上是一个可移植的库。

不幸的是,F#3.0不支持基于.NET 4.5的可移植库,只支持遗留库。在VS 2013中添加了对较新的可移植库(也称为基于.NETCore的库)的支持。

所以,你有两个选择:

  • Rx open-source release中构建Rx.sln的Release45或Debug45目标,并使用它而不是Rx NuGet包。

  • 使用Visual Studio 2013中提供的F#3.1。

答案 1 :(得分:2)

我也遇到了问题,我通过编辑fsproj并在所有被动dll路径中用Net40替换Net45来修复它。尽管我的fsproj文件中有以下内容,但这仍然是必需的:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

原始回答:

我之前的修复程序使项目编译但我无法使用RX(相当无意义)但是在下面。

错误来自这条线:

open System

现在我有:

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

一切正常!虽然可怕的丑陋,但它折磨了项目中的所有文件。

答案 2 :(得分:1)

当您在4.0项目中引用4.5 DLL时,会发生这种情况,反之亦然。确保您引用了正确的版本。

答案 3 :(得分:1)

这不是Mike在这里记录的臭名昭着的nuget / F#bug,是吗?

http://mikehadlow.blogspot.co.uk/2013/06/nuget-install-is-broken-with-f.html