2017-02-06 18 views
1

Я впервые использую поставщика типов F # в функциях Azure. Вот файл run.fsx:Функции Azure и F # Поставщик типа Json

#r "FSharp.Data" 
#r "Microsoft.WindowsAzure.Storage" 

open System 
open FSharp.Data 
open Microsoft.WindowsAzure.Storage.Table 

type Tweet = JsonProvider<"sample.json"> 

let Run (queueItem: string, tweets: ICollector<Tweet>) = 
    () 

Вот файл project.json:

{ 
    "frameworks": { 
    "net46": { 
     "dependencies": { 
     "FSharp.Data": "2.3.2" 
     } 
    } 
    } 
} 

sample.json находится в той же папке, что и другие файлы

Когда я бегу это, я получаю это:

 
> 2017-02-06T13:40:22.946 
> D:\home\site\wwwroot\TweeterDataCleaner\run.fsx(9,14): error FS3033: 
> The type provider 'ProviderImplementation.JsonProvider' reported an 
> error: Cannot read sample JSON from 'sample.json': Could not find file 
> 'D:\Windows\system32\sample.json' 

Любые предложения? Благодаря

ответ

2

Я нашел обходной путь, когда у меня была аналогичная проблема - с помощью __SOURCE_DIRECTORY__ значения (постоянный символ Я не уверен, что это точно?):

[<Literal>] 
let sample = __SOURCE_DIRECTORY__ + "/sample.json" 
type Tweet = JsonProvider<sample> 

Я хотел бы узнать, есть ли лучший способ указать это.

+2

Это сработало - спасибо. Я спросил у Дона Сим, что такое __SOURCE_DIRECTORY__, он сказал: «Errr. Hack?» –

+0

В идеале Azure Functions установит рабочий каталог для выполнения функции для этой функции. В настоящее время этого нет. SOURCE_DIRECTORY выглядит как макрос, который разрешает директорию исходного файла F #, например: $ env: HOME + '/ site/wwwroot/<имя_функции>/'. Это, безусловно, самый простой способ сделать это в настоящее время, так как я считаю, что изменение рабочего каталога функции может изменить рабочий каталог для других функций .net. –

+0

Шаблон выше (с использованием переменной окружения HOME + путь) является рекомендуемым подходом на данный момент. Мы планируем разоблачить это более удобным способом, чтобы вам не пришлось прыгать через обручи. –