从文件获取配置值,如果文件不存在则获取环境变量

Get config value from file, or environment variable if file doesn't exist

我正在尝试从配置文件中获取设置(最好是像 .ini 或 JSON 这样简单的文件,而不是 XML)。如果文件或设置不存在,我希望能够回退到检索环境变量。

我更愿意使用现有的库来处理 JSON/INI 而不是自己解析文件。但是,如果文件不存在,我发现的大多数库都无法工作。

如何从 F# 中可能存在或不存在的文件访问配置值?

您可以使用File.Exists来测试文件是否存在:

open System.IO

let getConfig file = 
    if File.Exists file
    then "config from file"
    else "config from somewhere else"

OpenExeConfiguration(尽管它的名字)可以打开任意配置文件。

还有一个非常灵活的 ASP.NET vNext Configuration stuff, outlined in this article - 不知道它有多可分离(或与您的实际用例相关)[除了您可以有条件地将配置文件包含到配置管理器中这一事实之外取决于它是否存在 la Mark 的答案]。

除了类型提供程序之外,FSharp.Data 还提供了一些基本的解析器,包括 JSON。这允许您使用 File.Exists 进行运行时检查,然后使用您喜欢的实用程序进行解析。

我在FAKE中采用了以下方法:

if File.Exists "local.json" then 
    let localVarProps = JsonValue.Parse(File.ReadAllText"local.json").Properties
    for key, jsonValue in localVarProps do
        setEnvironVar key (jsonValue.AsString())