Jsonプロバイダを作成するには、パス付きリテラルを渡す必要があります。異なる場所からプロジェクトに取り組んでいる人はいろいろあり、それぞれのパスはそれぞれ異なります。 (実際には各パスの始まりのみ)。パターンマッチングでリテラルを作成しようとしましたが、コンパイラはそれを受け付けません。これを行う別の方法がありますか?条件付きリテラルを作成できますか?
私の失敗した試みは、以下の通りです:
open FSharp.Data
[<Literal>]
let bitbucketRoot = // Error message: This is not a valid constant expression
let computerName = Environment.MachineName
match computerName with
| "DESKTOP-G3OF32U" -> "C:\\Users\\Fernando"
| "HPW8" -> @"H:\Dropbox\"
| _ -> failwith "Unknown computer"
[<Literal>] // Error message: This is not a valid constant expression
let projDataPath = bitbucketRoot + @"Bitbucket\VSProjects\Fractal10\Fractal10\data\"
[<Literal>] // Error message: This is not a valid constant expression
let jsonPath = projDataPath + "fractal.json"
type PathInfo = JsonProvider<Sample=jsonPath>
これはうまくいきません。つまり、コンパイル時にリテラルを知っておく必要があるということです。これを行うことはできません。 –