我想使用app.config
的{{1}}文件存储版本信息。我发现FSharp.Configuration type provider似乎很简单。但是,我遇到了一个我无法诊断的错误。
下面是F#
文件(与上面链接中的文件相同)和便笺簿的屏幕截图。
正如您所看到的,调用version.config
auto会填充配置的Settings
块中的所有内容的下拉列表,但是当我尝试运行某些内容时,
我收到一条错误消息,说我找不到的东西在配置文件的<appSettings>
部分找不到。
导致此错误的原因是什么,特别是考虑到它是 在配置文件中找到它,因为它是自动填充的?我该怎么做才能防止这种情况再次发生?
答案 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而且它不是一个擦除类型提供者。