C# 70-536 – Chapter 9 Installing and Configuring Applications

C# 70-536 – Chapter 9 Installing and Configuring Applications

這章最主要是討論System.Configuration的用法;除了using System.Configuration命名空間以外,如果要使用其它詳細的功能,還需要引用System.Configuration.dll。

我們最常使用的是ConfigurationManager以及Configuration這二個類別;尤其是ConfigurationManager,可以直接取用「目前」應用程式的組態設定檔(*.config),相當方便。

**WEB端則使用system.web.Configuration命名空間 及 WebConfiguration物件(但ConfigurationManager通用)

取得Configuration物件通常有以下幾種方法:(必須知道檔案位置以及擁有存取權限)

image

 

 


//使用Configurationmanager直接開啟
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);


//使用ExeConfigurationFileMap指定路徑後開啟
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = "ConsoleApplication2.exe.config";
Configuration config2 = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

組態設定檔也是有區分權限類別的,在這裡是使用ConfigurationUserLevel

image

組態設定檔常見內容:

1. 指定Runtime版本:(使用順序)

建立該應用程式的版本、依supportedRun中指定、目前有的Runtime版本。


<startup>
    <supportedRunTime version="v1.1.4322"></supportedRunTime>
</startup>

 

2. 指定使用組件位置:

設定DEVPATH環境變數,並在設定檔內啟用DEVPATH設定;也可以直接指定組件位置。

**使用DEVPATH

image

 


<configuration>
   <runtime>
      <developmentMode developerInstallation="true"/>
   </runtime>
</configuration>

 

**直接指定

 


<configuration> 
	<runtime> 
		<assemblyBindingxmlns="schemaname"> 
			<dependentAssembly> 
				<assemblyIdentityname="myprogram" 
				publicKeyToken="xxxxxxxxx"culture="en-us"/> 
				<codeBaseversion="x.0.0.0" 
				href="http://www.adatum.com/myprogram.dll"/> 
			</dependentAssembly> 
		</assemblyBinding> 
	</runtime> 
</configuration>

3. 組態設定(appSettings)及連線字串(connectionStrings):appSettings使用key,而connectionString則使用name or index。

AppSettings – NameValueCollection

ConnectionStrings – ConnectionStringSettingsCollection


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<appSettings>
		<add key="SystemName" value="ConsoleTest2"/>
	</appSettings>
	<connectionStrings>
		<clear/>
		<add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Database;User ID=user;Password=user"	providerName="System.Data.SqlClient" />
	</connectionStrings>
</configuration>

string systemName = "";
string connString = "";
string privoder = "";

//使用Configuration物件
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
systemName = config.AppSettings.Settings["SystemName"].Value;
connString = config.ConnectionStrings.ConnectionStrings["ConnectionString"].ConnectionString;
privoder = config.ConnectionStrings.ConnectionStrings["ConnectionString"].ProviderName;


//使用ConfigurationManager(Supported in: 3.5, 3.0, 2.0)
systemName = ConfigurationManager.AppSettings["SystemName"];
connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
privoder = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;


//使用ConfigurationSettings(Supported in: 3.5, 3.0, 2.0, 1.1, 1.0)
systemName = ConfigurationSettings.AppSettings["SystemName"];
//沒有可以直接存取連線字串的方法

 

 

**2.0以上版本建議使用ConfigurationManager

appSettings的內容可以引用自外部檔案,使用file or configSource(.Net Framework 2.0 up)。但要特別注意:

file 可讀外部和內部,先內後外,key重覆只會讀最前面的,而configSource 只能設定外部檔案。


<appSettings file="App_Data/external.config">
	<settings>
       <clear />
    </settings>
</appSettings>

另外,你也可以自訂組態,並且利用GetSection方法來存取或是實作IConfigurationSectionHandler介面,只要實做一個Create的方法就可以讀取。

小朱大有詳細的介紹…

[ASP.NET]撰寫自己的 Configuration 區段 Part 1:不要再賴在 appSettings 的屋簷下了,寫個自己的 Configuration 區段吧~

[ASP.NET]撰寫自己的 Configuration 區段 Part 2: 將自己的組態組織成一個 Group

[ASP.NET]撰寫自己的 Configuration 區段 Part 3: 自訂組態集合

 

除了利用Configuration,還有另外一個方法提供儲存應用程式或是使用者自行設定的資料:Settings.settings,比較特別的是,他有分成User及Application Scope。

User Scope:依據使用者不同而變動。

Application Scope:不因使用者不同而改變。

依據使用者變動之後的設定檔,會存放在:C:\Documents and Settings\{user name}\Local Settings\Application Data 中,該應用程式底下的user.config檔案,在System.Windows.Forms中,可以利用Application.LocalUserAppDataPath來得知。

image

image

 


systemName = Settings.Default.SystemName;
Settings.Default.UserName = "Shelly";
Settings.Default.Save();

 

修改過後的user.config

 


<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <ConsoleApplication2.Properties.Settings>
            <setting name="UserName" serializeAs="String">
                <value>Shelly</value>
            </setting>
        </ConsoleApplication2.Properties.Settings>
    </userSettings>
</configuration>

 

當然你也可以自訂這些設定類別,只要繼承自ApplicationSettingsBase(Supported in: 3.5, 3.0, 2.0)類別,然後將每個屬性值加上UserScopedSettings或是ApplicationScopedSettings。

MSDN範例:


//Application settings wrapper class
sealed class FormSettings : ApplicationSettingsBase
{
    [UserScopedSettingAttribute()]
    public String FormText
    {
        get { return (String)this["FormText"]; }
        set { this["FormText"] = value; }
    }

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("0, 0")]
    public Point FormLocation
    {
        get { return (Point)(this["FormLocation"]); }
        set { this["FormLocation"] = value; }
    }

    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("225, 200")]
    public Size FormSize
    {
        get { return (Size)this["FormSize"]; }
        set { this["FormSize"] = value; }
    }


    [UserScopedSettingAttribute()]
    [DefaultSettingValueAttribute("LightGray")]
    public Color FormBackColor
    {
        get { return (Color)this["FormBackColor"]; }
        set { this["FormBackColor"] = value; }
    }

}

另外可以使用組態管理工具來修改系統及本機config檔。請參照MSDN:.NET Framework 組態工具 (Mscorcfg.msc)

.NET Framework 2.0以上需安裝SDK:下載詳細資料: Microsoft .NET Framework 2.0 軟體開發套件(SDK) (x86)

 

相關連結:

appSettings 項目 (一般設定結構描述)

MSDN:ApplicationSettingsBase 類別

 

DotBlogs 的標籤:,