类型 seq<'a> 与类型 Collections.Generic.IEnumerable<'a> 不兼容

The type seq<'a> is not compatible with the type Collections.Generic.IEnumerable<'a>

在 fsx 文件中使用以下代码时出现错误 The type seq<'a> is not compatible with the type Collections.Generic.IEnumerable<'a>

module ReadOnly =
    let private asList<'a> (en:System.Collections.Generic.IEnumerable<'a>) : System.Collections.Generic.IList<'a> = 
        new System.Collections.Generic.List<'a>(en) :>  System.Collections.Generic.IList<'a>
    let private asReadOnly<'a> (en:System.Collections.Generic.IEnumerable<'a>) = 
        new System.Collections.ObjectModel.ReadOnlyCollection<'a>(asList(en))
    let ofSeq<'a> (ss: 'a seq) = asReadOnly<'a>(ss) // <-- ERROR IS HERE ON ARGUMENT 'ss'

netcoreapp2.1 控制台应用程序中使用相同的代码时一切正常。

我的 paket.dependencies 包含以下内容:

source https://www.nuget.org/api/v2
nuget NETStandard.Library
nuget canopy

我加载了以下内容:

#r "packages/NETStandard.Library/build/netstandard2.0/ref/netstandard.dll"
#r "packages/Selenium.WebDriver/lib/netstandard2.0/WebDriver.dll"
#r "packages/canopy/lib/netstandard2.0/canopy.dll"

Note: I included netstandard2.0 as I was having issues with not finding Object

有什么理由不使用 List<'T> 的方法 AsReadOnly()

let ofSeq<'a> (ss: 'a seq) = (ResizeArray ss).AsReadOnly()
// val ofSeq :
//   ss:seq<'a> -> System.Collections.ObjectModel.ReadOnlyCollection<'a>

我没有完整的答案,但这是我发现的。 回顾一下:

  1. 显示 NETStandard.Library 错误 seq<'a> is not compatible
  2. 没有 NETStandard.Library 错误 'Object' is required 显示

然而,在选项 #2 中,在我的测试中,代码在使用 FSI 调用时实际运行。 这意味着错误是 Intellisense 模块中的库冲突。

在我的测试中,脚本也会在使用选项 --noframework 并引用这两个中的任何一个时运行:

  • packages/FSharp.Core/lib/net45/FSharp.Core.dll
  • packages/FSharp.Core/lib/netstandard1.6/FSharp.Core.dll

...虽然只有 4.3.4 版本但没有 4.5.0 版本

编辑

一种可能的解决方案是添加对本地 GAC netstandard.dll 的显式引用,如下所示:

#r @"C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\netstandard\v4.0_2.0.0.0__cc7b13ffcd2ddd51\netstandard.dll"

这似乎解决了 Intellisense 的问题