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


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

首先介紹一個桌面程序中的例子,當我們新安裝一個軟件,軟件啟動后會有例如新手指導等窗體彈出來,每次都需要自己去關閉它。當然這些軟件都會提供例如不再顯示等功能。當選擇不再顯示功能后,這些窗體以后再也不顯示了。

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

下面通過一個例子來展示,

新建一個WPF項目,

藍色背景的便是Settings,

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

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

在程序中使用Setting,

            // 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個地方存儲。

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

2、操作系統--------當settings調用save()保存后。

3、內存----程序啟動后,實例化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 中的一部分進行操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM