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 对象,该对象又公开可用于处理关联配置文件的方法和属性。 方法执行读取或写入操作,并在每次写入文件时创建配置数据。
支持配置任务。 以下类型用于支持各种配置任务:
除了使用现有配置信息外,还可以通过扩展内置配置类型(如 ConfigurationElement、、 ConfigurationElementCollectionConfigurationProperty和 类)来创建和使用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) |
将指定客户端配置文件作为 Configuration 对象打开,该对象使用指定的文件映射和用户级别。 |
OpenMappedExeConfiguration(ExeConfigurationFileMap, ConfigurationUserLevel, Boolean) |
可将指定的客户端配置文件作为使用指定文件映射、用户级别和预加载选项的 Configuration 对象打开。 |
OpenMappedMachineConfiguration(ConfigurationFileMap) |
将计算机配置文件作为 Configuration 对象打开,该对象使用指定的文件映射。 |
RefreshSection(String) |
刷新命名节,这样在下次检索它时将从磁盘重新读取它。 |