ConfigurationManager 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供用戶端應用程式組態檔的存取權。 無法繼承這個類別。
public ref class ConfigurationManager abstract sealed
public static class ConfigurationManager
type ConfigurationManager = class
Public Class ConfigurationManager
- 繼承
-
ConfigurationManager
範例
第一個範例顯示簡單的主控台應用程式,可讀取應用程式設定、新增設定,以及更新現有的設定。
using System;
using System.Configuration;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ReadAllSettings();
ReadSetting("Setting1");
ReadSetting("NotValid");
AddUpdateAppSettings("NewSetting", "May 7, 2014");
AddUpdateAppSettings("Setting1", "May 8, 2014");
ReadAllSettings();
}
static void ReadAllSettings()
{
try
{
var appSettings = ConfigurationManager.AppSettings;
if (appSettings.Count == 0)
{
Console.WriteLine("AppSettings is empty.");
}
else
{
foreach (var key in appSettings.AllKeys)
{
Console.WriteLine("Key: {0} Value: {1}", key, appSettings[key]);
}
}
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error reading app settings");
}
}
static void ReadSetting(string key)
{
try
{
var appSettings = ConfigurationManager.AppSettings;
string result = appSettings[key] ?? "Not Found";
Console.WriteLine(result);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error reading app settings");
}
}
static void AddUpdateAppSettings(string key, string value)
{
try
{
var configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var settings = configFile.AppSettings.Settings;
if (settings[key] == null)
{
settings.Add(key, value);
}
else
{
settings[key].Value = value;
}
configFile.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}
catch (ConfigurationErrorsException)
{
Console.WriteLine("Error writing app settings");
}
}
}
}
Imports System.Configuration
Module Module1
Sub Main()
ReadAllSettings()
ReadSetting("Setting1")
ReadSetting("NotValid")
AddUpdateAppSettings("NewSetting", "May 7, 2014")
AddUpdateAppSettings("Setting1", "May 8, 2014")
ReadAllSettings()
End Sub
Sub ReadAllSettings()
Try
Dim appSettings = ConfigurationManager.AppSettings
If appSettings.Count = 0 Then
Console.WriteLine("AppSettings is empty.")
Else
For Each key As String In appSettings.AllKeys
Console.WriteLine("Key: {0} Value: {1}", key, appSettings(key))
Next
End If
Catch e As ConfigurationErrorsException
Console.WriteLine("Error reading app settings")
End Try
End Sub
Sub ReadSetting(key As String)
Try
Dim appSettings = ConfigurationManager.AppSettings
Dim result As String = appSettings(key)
If IsNothing(result) Then
result = "Not found"
End If
Console.WriteLine(result)
Catch e As ConfigurationErrorsException
Console.WriteLine("Error reading app settings")
End Try
End Sub
Sub AddUpdateAppSettings(key As String, value As String)
Try
Dim configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim settings = configFile.AppSettings.Settings
If IsNothing(settings(key)) Then
settings.Add(key, value)
Else
settings(key).Value = value
End If
configFile.Save(ConfigurationSaveMode.Modified)
ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name)
Catch e As ConfigurationErrorsException
Console.WriteLine("Error writing app settings")
End Try
End Sub
End Module
下列範例示範如何使用連接字串從資料庫讀取數據。
using System;
using System.Configuration;
using System.Data.SqlClient;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ReadProducts();
}
static void ReadProducts()
{
var connectionString = ConfigurationManager.ConnectionStrings["WingtipToys"].ConnectionString;
string queryString = "SELECT Id, ProductName FROM dbo.Products;";
using (var connection = new SqlConnection(connectionString))
{
var command = new SqlCommand(queryString, connection);
connection.Open();
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
}
}
}
}
}
}
Imports System.Configuration
Imports System.Data.SqlClient
Module Module1
Sub Main()
ReadProducts()
End Sub
Sub ReadProducts()
Dim connectionString = ConfigurationManager.ConnectionStrings("WingtipToys").ConnectionString
Dim queryString = "SELECT Id, ProductName FROM dbo.Products;"
Using connection As New SqlConnection(connectionString)
Dim command = New SqlCommand(queryString, connection)
connection.Open()
Using reader As SqlDataReader = command.ExecuteReader()
While reader.Read()
Console.WriteLine(String.Format("{0}, {1}", reader(0), reader(1)))
End While
End Using
End Using
End Sub
End Module
備註
ConfigurationManager 類別可讓您存取計算機、應用程式和使用者設定資訊。 此類別會取代已淘汰的 ConfigurationSettings 類別。 針對 Web 應用程式,請使用 WebConfigurationManager 類別。
若要使用 ConfigurationManager 類別,您的專案必須參考 System.Configuration
元件。 根據預設,某些項目範本,例如控制台應用程式,不會參考此元件,因此您必須手動參考它。
注意
應用程式組態檔的名稱和位置取決於應用程式的主機。 如需詳細資訊,請參閱使用組態檔
您可以使用內建 System.Configuration 型別,或衍生自它們來處理組態資訊。 藉由使用這些類型,您可以直接使用組態資訊,並擴充組態檔以包含自定義資訊。
ConfigurationManager 類別包含可讓您執行下列工作的成員:
從組態檔讀取區段。 若要存取組態資訊,請呼叫 GetSection 方法。 對於某些區段,例如
appSettings
和connectionStrings
,請使用 AppSettings 和 ConnectionStrings 類別。 這些成員會執行只讀作業、使用組態的單一快取實例,並且具有多線程感知。整體讀取和寫入組態檔。 您的應用程式可以在任何層級、本身或其他應用程式或計算機、本機或遠端讀取和寫入組態設定。 使用 ConfigurationManager 類別所提供的其中一種方法來開啟組態檔,例如 SampleApp.exe.config。這些方法會傳回 Configuration 物件,進而公開可用來處理相關聯組態檔的方法和屬性。 方法會執行讀取或寫入作業,並在每次寫入檔案時建立組態數據。
支援設定工作。 下列類型可用來支援各種組態工作:
除了使用現有的組態資訊之外,您還可以藉由擴充內建組態類型,例如 ConfigurationElement、ConfigurationElementCollection、ConfigurationProperty和 ConfigurationSection 類別,來建立及使用自定義組態專案。 如需如何以程式設計方式擴充內建組態類型的範例,請參閱 ConfigurationSection。 如需如何擴充使用屬性型模型的內建組態類型的範例,請參閱 ConfigurationElement。
給繼承者的注意事項
Configuration 類別可讓您以程序設計方式存取編輯組態檔。 您可以使用 ConfigurationManager所提供的其中一個 Open
方法。 這些方法會傳回 Configuration 物件,進而提供處理基礎組態檔所需的方法和屬性。 您可以存取這些檔案以進行讀取或寫入。
若要讀取組態檔,請使用 GetSection(String) 或 GetSectionGroup(String)。 讀取的使用者或行程必須具有下列權限:
目前組態階層層級之組態檔的讀取許可權。
讀取所有父組態檔的許可權。
如果您的應用程式需要對自己的組態進行只讀存取,建議您使用 GetSection(String) 方法。 這個方法可讓您存取目前應用程式的快取組態值,其效能優於 Configuration 類別。
若要寫入組態檔,請使用其中一個 Save 方法。 寫入的使用者或行程必須具有下列權限:
目前組態階層層級之組態檔和目錄的寫入許可權。
讀取所有組態檔的許可權。
屬性
AppSettings |
取得目前應用程式預設組態的 AppSettingsSection 數據。 |
ConnectionStrings |
取得目前應用程式預設組態的 ConnectionStringsSection 數據。 |
方法
GetSection(String) |
擷取目前應用程式預設組態的指定組態區段。 |
OpenExeConfiguration(ConfigurationUserLevel) |
開啟目前應用程式的組態檔做為 Configuration 物件。 |
OpenExeConfiguration(String) |
以 Configuration 物件開啟指定的用戶端組態檔。 |
OpenMachineConfiguration() |
以 Configuration 對象開啟目前電腦上的計算機組態檔。 |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean) |
開啟指定的用戶端組態檔做為 Configuration 物件,該物件會使用指定的檔案對應、用戶層級和預先載入選項。 |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel) |
開啟指定的用戶端組態檔作為使用指定檔案對應和用戶層級的 Configuration 物件。 |
OpenMappedMachineConfiguration(ConfigurationFileMap) |
以使用指定檔案對應的 Configuration 對象開啟計算機組態檔。 |
RefreshSection(String) |
重新整理具名區段,以便在下次擷取時從磁碟重新讀取。 |