使用FSharp.Configuration类型提供程序

时间:2017-01-05 00:16:55

标签: f# app-config

我想使用app.config的{​​{1}}文件存储版本信息。我发现FSharp.Configuration type provider似乎很简单。但是,我遇到了一个我无法诊断的错误。

下面是F#文件(与上面链接中的文件相同)和便笺簿的屏幕截图。

enter image description here

正如您所看到的,调用version.config auto会填充配置的Settings块中的所有内容的下拉列表,但是当我尝试运行某些内容时,

enter image description here

我收到一条错误消息,说我找不到的东西在配置文件的<appSettings>部分找不到。

导致此错误的原因是什么,特别是考虑到它是 在配置文件中找到它,因为它是自动填充的?我该怎么做才能防止这种情况再次发生?

1 个答案:

答案 0 :(得分:4)

你已经碰到了this issue

当您在FSI中运行配置提供程序时,它将不是应用程序的配置文件而是FSI的配置文件。解决此问题的一种方法是明确指定exe's config文件。这是一个例子:

open FSharp.Configuration
open System

type Settings = AppSettings<"app.config">

[<EntryPoint>]
let main argv = 
    let path = System.IO.Path.Combine [|__SOURCE_DIRECTORY__ ;"bin";"release";"ConfigApplication.exe" |]
    Settings.SelectExecutableFile path
    Settings.TestBool <- false  // change a setting
    printfn "%A" Settings.Test2 // read another setting
    Console.ReadLine() |> ignore
    0 // return an integer exit code

这将获取源目录中的App.config文件,但使用二进制目录中的ConfigApplication.exe.config文件。

如果您只需要设置DB的连接字符串,实际上更容易,如果SQL类型提供程序具有配置设置参数,只需在那里指定配置文件(并将其设置为始终在VS中复制),如果添加该字符串到.gitignore你可以有许多不同的app.config文件与不同的连接字符串。

你也可以使用YAML provider,它有两个优点,它不是XML而且它不是一个擦除类型提供者。