未定义“XmlProvider”类型

时间:2013-07-12 23:38:42

标签: f# type-providers f#-data

我正在尝试使用FSharp.Data第三方库但在The type 'XmlProvider' is not defined课程中收到错误XmlProvider

namespace KMyMoney

open FSharp.Data

  module Read =

    let xml = File.ReadAllText("KMyMoneySampleFile.xml")
    type KMyMoneySource = XmlProvider<xml>

我正在使用NuGet来获取库。库是'FSharp.Data 1.1.8'

当我输入FSharp.Data.时,有四个选项:CsvFreebaseOperatorsJsonRuntimeImplementation

我错过了什么吗?我对F#比较新。所以,抱歉这个简单的问题。我看过GitHub,但没有看到任何提及这个问题。我正在用F#创建一个库。

3 个答案:

答案 0 :(得分:4)

<>之间的参数是类型提供程序的Sample参数,它必须是编译时常量。该样本用于推断xml的结构。

请改为尝试:

namespace KMyMoney

open FSharp.Data

module Read =

    type KMyMoneySource = XmlProvider<"KMyMoneySampleFile.xml">

然后再做

let xml = KMyMoneySource.Load("KMyMoneySampleFile.xml")

或者如果您正在读取用作XmlProvider示例参数的同一文件,请执行以下操作:

let xml = KMyMoneySource.GetSample() 

请注意,类型提供程序是F#3.0的一项功能,因此仅适用于VS2012或更高版本。如果您使用的是VS2010,则会出现一堆语法错误。

答案 1 :(得分:2)

数据必须在编译时可用,这是通过将文件引用放在尖括号中来实现的(注意它是包含文件路径的字符串文字,而不是包含数据的字符串绑定)。您还可以通过将包含格式的字符串文字放在括号中来实现此目的:

type Stocks = CsvProvider<"../docs/MSFT.csv">

let csv = new CsvProvider<"1,2,3", HasHeaders = false, Schema = "Duration (float<second>),foo,float option">()

有关详细信息,请参阅here

答案 2 :(得分:1)

查看此link。基本上,您还需要添加System.Xml.Linq.dll作为项目的参考。