Тип «XmlProvider» не определен

Я пытаюсь использовать стороннюю библиотеку 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., дается четыре варианта: Csv, FreebaseOperators, Json и RuntimeImplementation.

Я что-то пропустил? Я относительно новичок в F#. Итак, извините за простой вопрос. Я смотрел на GitHub, но не видел упоминания об этой проблеме. Я создаю библиотеку в F #.


person Jon49    schedule 12.07.2013    source источник


Ответы (3)


Параметр между <> является параметром 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, вы получите кучу синтаксических ошибок.

person Gustavo Guerra    schedule 15.07.2013
comment
Итак, я должен использовать VS 2012, чтобы иметь возможность использовать FSharp.Data.DesignTime? Я использую VS 2010 в Windows 8. Может ли это быть моей проблемой? Когда я набираю XmlProvider, он не распознает его, а затем выдает ошибку под именем файла ‹KMyMoneySampleFile.xml› - Неожиданный строковый литерал в аргументах типа - person Jon49; 26.07.2013
comment
Поставщики типов — это функция F# 3.0, поэтому вам необходимо использовать VS2012 или VS2013. - person Gustavo Guerra; 26.07.2013
comment
Хорошо, укажите это в своем ответе, и я отмечу, что вы правы. Спасибо за вашу помощь! - person Jon49; 26.07.2013
comment
Я добавил это к ответу - person Gustavo Guerra; 29.07.2013

Данные должны быть доступны во время компиляции, что достигается путем помещения ссылки на файл в угловые скобки (обратите внимание, что это строковый литерал, содержащий путь к файлу, а не привязка строки, содержащая данные). Вы также можете добиться этого, поместив строковый литерал, содержащий формат, в скобках:

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

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

Подробнее см. здесь.

person N_A    schedule 13.07.2013
comment
Я пробовал, и это не сработало. Я думаю, я мог бы найти проблему. FSharp.Data.DesignTime находится в фреймворке 4.5, а я работаю в 4.0. - person Jon49; 14.07.2013

Перейдите по этой ссылке. В основном вам нужно добавить System.Xml.Linq.dll также как ссылку на ваш проект.

person Ankur    schedule 13.07.2013
comment
Я действительно указал это в своих ссылках. Я думаю, я мог бы найти проблему. FSharp.Data.DesignTime находится в фреймворке 4.5, а я работаю в 4.0. - person Jon49; 14.07.2013
comment
FSharp.Data.DesignTime запускается только внутри компилятора, а не во время выполнения, поэтому версия .NET не имеет значения. Версия .NET, которая имеет значение, — это версия FSharp.Data.dll, и в настоящее время она составляет 4.0. - person Gustavo Guerra; 15.07.2013