2012-10-24 37 views
65

我在我的項目中添加了App.config文件。 從項目>屬性>設置面板中我已經創建了兩個設置 -App.config:用戶vs應用範圍

enter image description here

我注意到,當我加入的設置,我可以定義範圍爲UserApplication。 -

  1. 用戶
  2. 應用

如果我定義設置爲User它去userSettings部分,
如果我定義設置爲Application它去applicationSettings部分

應用。 config

<configuration> 

    <userSettings> 
     <DemoApp.Properties.Settings> 
      <setting name="MySetting1" serializeAs="String"> 
       <value>Value1</value> 
      </setting> 
     </DemoApp.Properties.Settings> 
    </userSettings> 

    <applicationSettings> 
     <DemoApp.Properties.Settings> 
      <setting name="MySetting2" serializeAs="String"> 
       <value>Value2</value> 
      </setting> 
     </DemoApp.Properties.Settings> 
    </applicationSettings> 

</configuration> 

但是,這些設置可以從.cs以同樣的方式進行訪問 -

代碼

string mySetting1 = DemoApp.Properties.Settings.Default.MySetting1; 
string mySetting2 = DemoApp.Properties.Settings.Default.MySetting2; 

是什麼UserApplication範圍之間,什麼情況下應該選擇的區別這兩個?

回答

47

基本上,應用程序設置不能在運行程序和用戶設置期間更改。這些用戶設置應該保存下來,以便用戶在接下來運行應用程序時獲得熟悉的體驗。

編輯: 爲例子,你可以寫不同的模塊應用程序,並需要確保您的主模塊使用安全模塊的正確版本。爲此,你需要建立一個應用程序範圍的設置如:

SecurityModuleVersion string  Application  v1.21 

一段時間後,當你重構的安全模塊,可能會更改值V1.22當您部署,以確保正確的安全正在實施

在另一方面,如果你的應用有不同的「皮膚」顏色的改變,改變字體等,那麼你可以建立一個用戶設置類似如下:

ApplicationSkin  string  User    DefaultSkin 

然後,當Michelle改變了她喜歡的皮膚,該應用程序記得她的設置。該屬性現在可能看起來像:

ApplicationSkin  string  User    HelloKittySkin 
+0

你可以用plz解釋一個例子嗎? –

+12

'HelloKittySkin':P – Dan

+0

默認設置在配置文件中,是嗎?但保存的用戶設置存儲在哪裏? –

61

應用程序範圍設置是隻讀的,只能在設計時或通過修改應用程序會話之間的.exe.config文件來更改。但是,用戶範圍設置可以在運行時寫入,就像您更改任何屬性值一樣。新值在應用程序會話期間持續存在。通過調用Settings.Save方法,您可以在應用程序會話之間持續更改用戶設置。在MSDN

來源:Using Settings in C#

用戶設置通常使用的用於持久化的用戶偏好(例如,應用程序的通知偏好等等)。應用程序設置通常用於諸如API密鑰等項目。

正如@kmote所述,當用戶設置在運行時被修改並保留(通過settings.Save())時,它們將被寫入用戶配置文件存儲器中的文件夾(通常C:\ Users \ 用戶名 \ AppData \ Local \ AppName在Windows 7及更高版本中)。爲了以編程方式確定文件的位置,請參閱this post

+0

任何活生生的例子,將不勝感激 –

+1

還應該指出的是,用戶設置無法通過編輯會話之間的config文件進行更改。 – kmote

+0

@kmote當然可以!如果會話關閉,您可以更改配置(並因此更改userSetting)。當你再次開始會話時,這個變化會持續存在並反映在程序中......我剛剛測試過它。 – Heliac