c#配置文件app.config 與 Settings.settings

本篇博客將介紹C#中Settings的使用。參考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-settings-dotnet?view=vs-2017app

首先介紹一個桌面程序中的例子,當咱們新安裝一個軟件,軟件啓動後會有例如新手指導等窗體彈出來,每次都須要本身去關閉它。固然這些軟件都會提供例如再也不顯示等功能。當選擇再也不顯示功能後,這些窗體之後不再顯示了。ide

對於這些設置,能夠採用下面的一些方法來存儲,自定義XML文件,註冊表,固然還能夠是C#中自帶的Settings文件。推薦使用Settings文件。註冊表輕易不要使用,自定義XML在使用時須要解析,能夠當備選方案。ui

下面經過一個例子來展現,this

新建一個WPF項目,spa

藍色背景的即是Settings,操作系統

一個Setting有4個屬性Name,Type,Scope,Value。重點講一下Scope屬性,Scope屬性有兩個值Application,User。這二者區別,Scope值爲Application時,對應的Setting在運行時不能夠修改。Scope值爲User時,對應的Setting在運行時能夠修改。code

Setting保存位置:當程序編譯後,Setting的值保存在<AssemblyName>.exe.config文件中,例如:orm

在程序中使用Setting,xml

            // Modify the setting value
            Properties.Settings.Default.DisplayGuide = false;
            // Save setting value
            Properties.Settings.Default.Save();

 

其中,Settings裏的屬性根據範圍分爲兩種 「用戶」和「應用程序」(其中:應用程序級配置是隻讀的,而用戶級是可讀寫的。)對象

範圍爲「應用程序」的屬性,讀取都是從APP.CONFIG裏獲取,設置也能夠經過手工修改App.config改變,可是在程序中沒法對其進行賦值,只能讀取。

而範圍爲「用戶」的屬性 Settings 在第一次運行時會讀取App.config裏的初始值

可是一旦調用Save方法後,Settings裏「用戶」範圍的屬性就會保存在系統裏面,相似WebForm裏的Cookies同樣

今後之後,讀取都會從系統裏保存的值裏讀取,手工修改App.config裏的「用戶」範圍的屬性不會影響到這些屬性,可是在調用Reset方法時會重新從App.config裏獲取「用戶」範圍的屬性寫入到系統中。

            也就是說,settings裏「用戶」範圍的屬性總共有3個地方存儲。

一、app.config配置文件-----程序第一次運行,以前程序未調用save(),在系統中找不到就會從這裏獲取

二、操做系統--------當settings調用save()保存後。

三、內存----程序啓動後,實例化settings對象,該實例在建立的時候從系統(若是系統中沒有就如前面提到的從配置文件中獲取)讀取在內存中。

 

一旦咱們經過VC#給它添加值後,在工程目錄下會生成一個 app.config 文件。

那麼,這兩個東西到底是什麼關係?

添加兩個字符串類型的配置值(一個應用程序級,一個是用戶級)後:

  • Settings.settings
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="WpfApplication1.Properties" GeneratedClassName="Settings">  <Profiles />  <Settings>  <Setting Name="thisIsAppSettings" Type="System.String" Scope="Application">  <Value Profile="(Default)">dbzhang800</Value>  </Setting>  <Setting Name="thisIsUserSettings" Type="System.String" Scope="User">  <Value Profile="(Default)">1+1=2</Value>  </Setting>  </Settings> </SettingsFile>
  • app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>  <configSections>  <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >  <section name="WpfApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />  </sectionGroup>  <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >  <section name="WpfApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  </sectionGroup>  </configSections>  <userSettings>  <WpfApplication1.Properties.Settings>  <setting name="thisIsUserSettings" serializeAs="String">  <value>1+1=2</value>  </setting>  </WpfApplication1.Properties.Settings>  </userSettings>  <applicationSettings>  <WpfApplication1.Properties.Settings>  <setting name="thisIsAppSettings" serializeAs="String">  <value>dbzhang800</value>  </setting>  </WpfApplication1.Properties.Settings>  </applicationSettings> </configuration>

儘管都是 xml 文件,兩個文件的風格大相徑庭,後者 app.config 就是咱們前一篇中介紹到了 Configuration 文件,從它的configSections中能夠看出它有兩個自定義段,分別叫applicationSettings 和 userSettings

操做這樣的一個文件,咱們能夠建立ConfigurationManager命名空間中的ConfigurationSection的派生類,而後經過該類進行操做。

Settings.settings 看起來至關的簡潔,並且和app.config相比,它包含有配置值的類型(好比:Type="System.String")。

並且,不管咱們修改Settings.settings仍是app.config,Visual studio都會提示咱們,並自動同步到另外一個文件中。

  • Settings.settings 文件的存在的目的是爲了生成一個名爲 Settings.Designer.cs 的文件,該文件內的類提供了操做配置文件 (好比:program.exe.config) 的封裝類。
  • app.config 會被拷貝到應用程序目錄下,並變身爲 program.exe.config

這樣一來,在程序內就能夠經過

            Properties.Settings.Default.thisIsUserSettings = "999999999";
 console.WriteLine(Properties.Settings.Default.thisIsAppSettings);  Properties.Settings.Default.Save();

來操做配置文件了。

用戶配置會被寫入到

C:\Users\Administrator\AppData\Local\「項目名稱」\WPFUserSetting.exe_Url_v4wjaifsqnskfnd0x5zhrlngptsdqoii\1.0.0.0\user.config

這些文件中。

多個.settings文件

同一個工程中,能夠添加多個 .settings 文件,每個都會生成一個封裝類,各對 app.config 中的一部分進行操做。

相關文章
相關標籤/搜索