这很奇怪。
我有两个项目都是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中完美运行。
有什么建议吗?
答案 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