这很奇怪。
我有两个项目都是F#。我已经通过NUGET安装了RX的最新稳定版本(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中工作得很好。
有什么建议吗?
正如@Mark Seemann所指出的,问题源于.NET 4.5的Rx-NuGet包实际上是一个可移植库。
不幸的是,F#3.0不支持基于.NET 4.5的可移植库,只支持遗留库。VS 2013中增加了对较新的可移植库(也称为基于.NETCore的库)的支持。
所以,你有两个选择:
-
在Rx开源版本中构建Rx.sln的Release45或Debug45目标,并使用它来代替Rx NuGet包。
-
使用Visual Studio 2013中提供的F#3.1。
我也有这个问题,我通过编辑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
一切顺利!虽然丑陋得可怕,但它折磨着项目中的所有文件。
当您在4.0项目中引用4.5 DLL时会发生这种情况,反之亦然。确保你引用的是正确的版本。
这不是Mike在这里记录的臭名昭著的nuget/F#错误,是吗?
http://mikehadlow.blogspot.co.uk/2013/06/nuget-install-is-broken-with-f.html