開發環境:Win10 64Bit,VS2013
新建一個Winform項目,會看到項目中有這樣兩個文件:Properties\Settings.settings(XML文件,還有一個配套的自動生成的Settings.Designer.cs),App.config。
簡而言之,Settings對應App.config中的這兩個Section:“configuration\userSettings”與“configuration\applicationSettings”,Settings提供了可視化修改App.config中這兩個Section的途徑,然而Settings與App.config卻是獨立存在於磁盤上的兩個實體。
做幾個簡單實驗,就理解咋回事了。
修改Settings文件,App.config一定會跟着同步;但手動修改App.config,卻分幾種情況:
1,修改字段值,打開Settings時,會彈出對話框,告知值不一樣,詢問是否更新,要回答否的話,兩個文件就不同步了。(當然,只要修改一下Settings,App.config就一定跟着同步。)
2,增加字段值,打開Settings時,會自動修改Settings,沒有任何詢問,無條件加入對應的字段值。
3,刪除字段值,打開Settings時,什么也不會發生,如果此時改動了Settings,App.config會被同步,只要改動不是同樣的刪除,刪除的字段就又回來了。
生成應用程序時,會將App.config復制到TARGET目錄下,並改名為“執行文件.exe.config”,跟Settings沒有關系。
configuration\userSettings可以在執行期間讀寫:
讀:Properties.Settings.Default.xx
寫:Properties.Settings.Default[xx] = new_value; Properties.Settings.Default.Save();
configuration\applicationSettings據說也可以修改,不過比較麻煩,我建議“不要沒事找抽”!
按照奧克姆剃刀原則,如無必要,勿增實體,所以更好的設計應該是:在App.config下增加一個APP.config.designer.cs來替代Settings.Designer.cs,同時為App.config提供可視化界面與代碼界面。微軟又犯二了!