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) |
刷新命名节,以便下次检索到它时,它将从磁盘重新读取。 |