我試圖從配置文件(最好是簡單的.ini或JSON,而不是XML)的設置。如果文件或設置不存在,我希望能夠退回到檢索環境變量。從文件或環境變量獲取配置值如果文件不存在
我更願意使用現有的庫來處理JSON/INI,而不是自己解析文件。但是,如果文件不存在,大多數我找到的庫都無法運行。
如何從F#中可能存在或不存在的文件訪問配置值?
我試圖從配置文件(最好是簡單的.ini或JSON,而不是XML)的設置。如果文件或設置不存在,我希望能夠退回到檢索環境變量。從文件或環境變量獲取配置值如果文件不存在
我更願意使用現有的庫來處理JSON/INI,而不是自己解析文件。但是,如果文件不存在,大多數我找到的庫都無法運行。
如何從F#中可能存在或不存在的文件訪問配置值?
除了類型提供者,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())
您可以使用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東西,outlined in this article這是相當靈活的 - 不知道它是怎麼分開的(或有關您的實際使用情況)除了事實,你可以有條件地包含在配置文件到依賴於配置管理器是否存在拉馬克的答案]。
感謝馬克 - 肯定意識到這種做法的,但訣竅現在是從文件中獲取的配置。但我認爲我不能使用FSharp.Configuration中的類型提供程序,因爲如果文件不在那裏,我的代碼就會失敗,即使我檢查它是否存在。 –
如果你想使用JSON,你可以試試[Json.NET](http://www.newtonsoft.com/json),但爲什麼排除XML? .NET中的內置配置系統基於XML文件。這遠非完美,但它是一個成熟和描述清晰的系統。儘管存在一些缺陷,但它仍然適用。 –