2012-09-27 87 views
2

雖然看起來存在一個簡單的問題,但我無法從F#控制檯應用程序寫入配置文件。我的最後一次嘗試看起來像如何從F#控制檯應用程序寫入appSettings?

let config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) 
// config.AppSettings.SectionInformation.AllowExeDefinition <-ConfigurationAllowExeDefinition.MachineToLocalUser 
match self.FileName with 
| Some name -> config.AppSettings.Settings.["FileName"].Value <- name 
| None ->() 
config.Save(ConfigurationSaveMode.Modified) 

我得到各種各樣的錯誤。與此代碼對應的是

System.NullReferenceException:未將對象引用設置爲對象的實例。 在System.Configuration.ConfigurationElement.SetPropertyValue(的ConfigurationProperty道具,對象的值,布爾ignoreLocks)...

有F#中沒有良好的文檔,我覺得很難遵循C#/ VB文檔。 有什麼建議嗎?

+2

它可以是'KeyValueConfigurationElement'問題是根本不存在的?如果不是,你必須先設置「設置(鍵,值)」。 – bytebuster

+0

當使用'Settings.Add'時,錯誤是'System.Configuration.ConfigurationErrorsException:執行appSettings的配置節處理程序時發生錯誤。 ---> System.InvalidOperationException:在鎖定時無法編輯ConfigurationSection屬性。 –

+0

在MSDN上查看[this](http://msdn.microsoft.com/en-us/library/ms134265.aspx)示例。如果你有**創建了一個部分,你可能需要重新加載它,以便它的值可用於閱讀。如果這沒有幫助,請考慮在你的問題中增加更多細節,以便更容易回答。 – bytebuster

回答

2

你必須檢查null並且相應地更新或添加。

事情是這樣的:

let config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) 
let settings = config.AppSettings.Settings 
let set (s:KeyValueConfigurationCollection) key value = 
    match s.[key] with 
    | null -> s.Add(key,value) 
    | x -> x.Value <- value 
match self.FileName with 
| Some name -> set settings "Filename" name 
| _   ->() 
相關問題