我在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中运行的区别:
我似乎无法强迫VS使用FSharp.Core 4.0.0.1。即使我添加特定版本,它仍然使用4.3.4
答案 0 :(得分:2)
似乎问题出在FCore.Sharp Visual Studio默认使用。要使用特定版本,通过nuget添加它是不够的,但必须添加
<FSharpCoreImplicitPackageVersion>4.4.1.18</FSharpCoreImplicitPackageVersion>
到项目配置。有了它,似乎代码工作,但调试器(监视窗口)和即时窗口仍然无法识别后代方法。我不知道这是怎么回事。我假设VS中存在某种错误。
另一种选择似乎是使用FSharp.Data 3 beta(具有相同的监视/即时问题)