使用 FSharp.Configuration 类型提供程序

Using the FSharp.Configuration type provider

我想使用 F#app.config 文件来存储版本控制信息。我发现 FSharp.Configuration type provider 似乎很简单。但是,我 运行 遇到了一个我无法诊断的错误。

下面是 version.config 文件的屏幕截图(与上面 link 中的文件相同)和草稿本。

如您所见,调用 Settings 自动填充配置 <appSettings> 块中所有内容的下拉列表,但是当我尝试 运行 某些内容时,

我收到一条错误消息,指出在配置文件的 <appSettings> 部分找不到我要查找的内容。

是什么导致了这个错误,特别是考虑到它显然 在配置文件中找到它,因为它是自动填充的?我能做些什么来防止这种情况再次发生?

您遇到了 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 文件。

如果你只需要设置数据库的连接字符串,其实更简单,如果SQL类型提供者有配置设置参数,只需在那里指定配置文件(并在VS中设置为始终复制),如果你将它添加到 .gitignore,你可以有许多不同的 app.config 文件和不同的连接字符串。

您也可以使用 YAML provider,它有两个优点,它不是 XML,也不是擦除类型提供程序。