Fsharp.Data,HtmlDocument没有扩展名Descendants

时间:2018-05-24 09:07:56

标签: macos visual-studio f# f#-data

我在mac上试用f#并遇到一个非常简单的脚本问题。我跟随this tutorial,但它在结果中断了。后代[" a"]。

有趣的是,VS认为.Descendants是一种有效的结果方法,但在运行时(尝试只是没有参数的后代)我得到:

error CS1061: 'HtmlDocument' does not contain a definition for 'Descendants' and no 
extension method 'Descendants' accepting a first argument of type 'HtmlDocument' could
be found (are you missing a using directive or an assembly reference?)

似乎FSharp.Data只是部分导入或其他东西。有趣的是,HtmlDocument有效,但扩展不是。

任何想法如何解决这个问题?

编辑:代码

// Learn more about F# at http://fsharp.org

open System
open FSharp.Data

[<EntryPoint>]
let main argv =
    let results = HtmlDocument.Load("http://www.google.co.uk/search?q=FSharp.Data")
    let links = 
        results.Descendants "a"
        |> Seq.choose (fun x -> 
               x.TryGetAttribute("href")
               |> Option.map (fun a -> x.InnerText(), a.Value())
        )
    0 // return an integer exit code

Edit2:我手动用nuget下载了FSharp.Data,我可以在fsharpi中运行下面的脚本。我不知道这与视觉工作室之间的区别是什么?

#r "./FSharp.Data.2.4.6/lib/net45/FSharp.Data.dll" 
open FSharp.Data

let results = HtmlDocument.Load("http://www.google.co.uk/search?q=FSharp.Data")
let d= results.Descendants "a"

编辑3:在fsharpi和vs中运行的区别:

  • fsharpi使用mono,而VS使用dotnet(.net core 2)
  • nuget下载了FSharp.Core 4.0.0.1,而VS正在使用4.3.4

我似乎无法强迫VS使用FSharp.Core 4.0.0.1。即使我添加特定版本,它仍然使用4.3.4

1 个答案:

答案 0 :(得分:2)

似乎问题出在FCore.Sharp Visual Studio默认使用。要使用特定版本,通过nuget添加它是不够的,但必须添加

<FSharpCoreImplicitPackageVersion>4.4.1.18</FSharpCoreImplicitPackageVersion>

到项目配置。有了它,似乎代码工作,但调试器(监视窗口)和即时窗口仍然无法识别后代方法。我不知道这是怎么回事。我假设VS中存在某种错误。

另一种选择似乎是使用FSharp.Data 3 beta(具有相同的监视/即时问题)