1. 程式人生 > 實用技巧 >C#下.NET配置檔案使用(二)

C#下.NET配置檔案使用(二)

app.config 與 Settings.settings

用VC#建立一個GUI程式後,就會有一個 Settings.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\dbzhang\AppData\Local\WpfApplication1\WpfApplication1.vshost.ex_Url_nifqt3tilgkwjt1wb1fupctc0ddm3exq\1.0.0.0\user.config

多個.settings檔案

同一個工程中,可以新增多個 .settings 檔案,每一個都會生成一個封裝類,各對 app.config 中的一部分進行操作。

比如:在前面的基礎上,新增新的

  • another.settings
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="WpfApplication2.Properties" GeneratedClassName="another">
  <Profiles />
  <Settings>
    <Setting Name="qter1" Type="System.String" Scope="Application">
      <Value Profile="(Default)">abc</Value>
    </Setting>
    <Setting Name="qter2" Type="System.String" Scope="User">
      <Value Profile="(Default)">efg</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="WpfApplication2.Properties.another" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            <section name="WpfApplication2.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="WpfApplication2.Properties.another" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <WpfApplication2.Properties.another>
            <setting name="qter2" serializeAs="String">
                <value>efg</value>
            </setting>
        </WpfApplication2.Properties.another>
        <WpfApplication2.Properties.Settings>
            <setting name="user1" serializeAs="String">
                <value>dbzhang800</value>
            </setting>
            <setting name="user2" serializeAs="String">
                <value>dbzhang801</value>
            </setting>
        </WpfApplication2.Properties.Settings>
...