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
上述範例假設您的專案具有 App.config 檔案,如下所示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="Setting1" value="May 5, 2014"/>
<add key="Setting2" value="May 6, 2014"/>
</appSettings>
</configuration>
下列範例示範如何使用 連接字串 從資料庫讀取數據。
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
上述範例假設您的專案有 App.config,如下所示。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<add name="WingtipToys" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False" />
</connectionStrings>
</configuration>
備註
類別 ConfigurationManager 可讓您存取計算機、應用程式和使用者設定資訊。 這個類別會 ConfigurationSettings 取代已被取代的類別。 針對 Web 應用程式,請使用 WebConfigurationManager 類別。
若要使用 ConfigurationManager 類別,您的專案必須參考 System.Configuration
元件。 根據預設,某些項目範本,例如控制台應用程式,不會參考此元件,因此您必須手動參考它。
注意
應用程式組態檔的名稱和位置取決於應用程式的主機。 如需詳細資訊,請參閱 使用組態檔設定應用程式。
您可以使用內 System.Configuration 建類型,或衍生自這些類型來處理組態資訊。 藉由使用這些類型,您可以直接使用組態資訊,並擴充組態檔以包含自定義資訊。
類別 ConfigurationManager 包含可讓您執行下列工作的成員:
從組態檔讀取區段。 若要存取組態資訊,請呼叫 GetSection 方法。 針對和 等
appSettings
connectionStrings
部分區段,請使用 AppSettings 和 ConnectionStrings 類別。 這些成員會執行只讀作業、使用組態的單一快取實例,並感知多線程。整體讀取和寫入組態檔。 您的應用程式可以在任何層級、本身或其他應用程式或計算機、本機或遠端讀取和寫入組態設定。 使用 類別所提供的 ConfigurationManager 其中一種方法來開啟組態檔,例如 SampleApp.exe.config。這些方法會傳回 Configuration 物件,接著會公開可用來處理相關聯組態檔的方法和屬性。 方法會執行讀取或寫入作業,並在每次寫入檔案時建立組態數據。
支援設定工作。 下列類型可用來支援各種設定工作:
除了使用現有的組態資訊之外,您還可以藉由擴充、、 ConfigurationProperty和 類別ConfigurationSection等ConfigurationElementConfigurationElementCollection內建組態類型,來建立及使用自定義組態專案。 如需如何以程式設計方式擴充內建組態類型的範例,請參閱 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) |
開啟指定的用戶端組態檔,做為使用指定檔案對應和使用者層級的 Configuration 物件。 |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean) |
開啟指定的用戶端組態檔,做為使用指定之檔案對應、使用者層級和預先載入選項的 Configuration 物件。 |
OpenMappedMachineConfiguration(ConfigurationFileMap) |
開啟電腦組態檔做為使用指定檔案對應的 Configuration 物件。 |
RefreshSection(String) |
重新整理具名區段,以便下次擷取它時,會從磁碟重新讀取它。 |