2016-12-02 90 views
0

我有一個C#程序,其中包含存儲在程序項目設置中的各種設置。由於它是一個命令行程序,這些設置將由用戶在user.config文件中更改。我無法弄清楚如何強制它保存所有的默認值。強制所有用戶設置保存

調用Properties.Settings.Default.Save();只有當我更新程序中的屬性時才起作用,這會破壞持久性設置文件的重點。

如果我運行

Properties.Settings.Default.SomeSetting = "Help"; 
Properties.Settings.Default.Save(); 

在config文件中我會看到類似

< setting name="SomeSetting" serializeAs="String"> 
    <value>Help</value> 
< /setting> 

我想做什麼情況是,如果配置文件不存在,創建和存儲所有設置。然後用戶可以根據需要更改它們。

回答

0

我設法解決這個問題的方法是修改一些現有的代碼,我在不同的項目中處理版本升級。

當程序運行時:

if (PropertiesSettings.Default.UpgradeRequired) 
{ 
    Properties.Settings.Default.Upgrade(); 
    Properties.Settings.Default.UpgradeRequired = false; 
    Properties.Settings.Default.Save(); 
    reloadSettings(); 
} 

// Assign settings to themselves and save 
// This keeps settings the same as the defaults even when upgrading but ensures all settings appear in the config file 
private void reloadSettings() 
{ 
    Properties.Settings.Default.Setting1 = Properties.Settings.Default.Setting1; 
    Properties.Settings.Default.Setting2 = Properties.Settings.Default.Setting2; 
    //etc 
    Properties.Settings.Default.Save(); 
} 
0

設置保存在用戶AppData特定於給定過程的文件夾中。例如,當應用程序在調試器下運行時,您會得到與獨立運行時不同的設置。

我猜想沒有簡單的方法來使用這些屬性設置跨應用程序共享設置。這段代碼相當老舊(.NET 2.0甚至之前),所以我認爲它的設計並不容易定製,因爲最近的代碼通常就是這種情況。

我認爲這些設置適用於特定應用程序的特定事物,並且如果數據需要跨應用程序共享,那麼您應該管理自己的文件。

通常,您可以使用基於XML或JSON的文件,並且如果數據旨在對用戶可見或在用戶應用程序數據目錄的子目錄下可見,則數據將被存儲(默認情況下)在My Documents的子目錄下如果一個普通用戶不應該看到這些文件。

+0

這並沒有真正回答這個問題。我會爲這個問題添加更多的細節。 – MikeS159

+0

嗯,我認爲真正的答案几乎是一樣的......我想這是不可能的,因爲代碼的設計方式並不是很容易定製。因此,如果設置不符合您的需要,您必須編寫自己的系統。 – Phil1970

+0

另一種可能是使用'PropertyGrid'來允許用戶從應用程序內部編輯設置。這樣,你會看到所有的屬性,如果甚至會比直接編輯文件更方便用戶使用。 – Phil1970