Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 使用FSharpChecker使类型提供程序无效_F#_Type Providers - Fatal编程技术网

F# 使用FSharpChecker使类型提供程序无效

F# 使用FSharpChecker使类型提供程序无效,f#,type-providers,F#,Type Providers,我经常在运行中检查一些代码的类型,但我不知道如何正确处理类型提供程序。我正在做: let checker = FSharpChecker.Create() let tempDir = let d = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) Directory.CreateDirectory(d) |> ignore d let dummyFile = "dummy.fsx" let C

我经常在运行中检查一些代码的类型,但我不知道如何正确处理类型提供程序。我正在做:

let checker = FSharpChecker.Create()
let tempDir = 
    let d = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName())
    Directory.CreateDirectory(d) |> ignore
    d
let dummyFile = "dummy.fsx"

let Check source template =
    let args = 
        [|
            yield "-r:" + Path.Combine(root, "FSharp.Core.dll")
            yield "-r:" + Path.Combine(root, "mscorlib.dll")
            yield "-r:" + Path.Combine(root, "System.Numerics.dll") //not sure why I need this
            yield "--noframework"
            for r in refs do yield "-r:" + Path.Combine(root, r)
        |]
    try
        File.WriteAllText(Path.Combine(tempDir, "inputForTheTypeProvider.txt"), template)

        let file = Path.Combine(tempDir, dummyFile)
        let opts = checker.GetProjectOptionsFromScript(file, source, otherFlags = args) |> Async.RunSynchronously
        let parse = checker.ParseFileInProject(file, source, opts) |> Async.RunSynchronously
        let answer = checker.CheckFileInProject(parse, file, 0, source, opts) |> Async.RunSynchronously
        match answer with
        | FSharpCheckFileAnswer.Succeeded check ->
            TypeCheckResults.Success { Check = check; Parse = parse }
        | FSharpCheckFileAnswer.Aborted ->
            TypeCheckResults.Failure (sprintf "%A" answer)
    with
    | ex ->
        TypeCheckResults.InternalError (ex.Message, ex.StackTrace)
source
包含F#代码并使用类型提供程序。现在的问题是,检查程序在第一次通过时按预期工作,但当我更改
“InputforTypeProvider.txt”
的内容时,在我重新启动
FSharpChecker
之前,仍将使用以前的版本。我猜在随后的过程中使用了某种类型的类型提供程序输出的缓存版本,但我不知道如何使其无效。我已经尝试过使用
checker.InvalidateAll
checker.NotifyProjectCleaned(opts)
但没有效果