108

WebConfigurationManager和 有什么区别ConfigurationManager

我什么时候应该使用其中一种?

更新

我刚刚查看了WebConfigurationManager,由于某种原因,您无法像在ConfigurationManager(如数组)中那样访问连接字符串。谁能告诉我为什么MS会这样?使用WebConfigurationManager.

再次更新警告!

如果您没有对添加到项目中的命名空间的引用,那么当您尝试访问类似数组System.Configuration时,Visual Studio 将显示错误!WebConfigurationManager.ConnectionStrings

4

4 回答 4

97

WebConfigurationManger 知道如何处理 Web 应用程序中的配置继承。如您所知,一个应用程序中可能有多个 web.config 文件 - 一个在站点的根目录中,而在子目录中则为任意数量。您可以将路径传递给 GetSection() 方法以获取可能的覆盖配置。

如果我们用 Reflector 查看 WebConfigurationManager,那么事情就很清楚了:

public static object GetSection(string sectionName)
{
    ...
    return ConfigurationManager.GetSection(sectionName);
}

public static object GetSection(string sectionName, string path)
{
    ...
    return HttpConfigurationSystem.GetSection(sectionName, path);
}
于 2009-03-30T17:50:34.737 回答
27

WebConfigurationManager 专为 ASP.NET 应用程序而设计。

WebConfigurationManager 提供了额外的方法来加载适用于 Web 应用程序的配置文件。

ConfigurationManager 还提供了加载适用于“.exe”应用程序的配置文件的方法。

我建议看一下 WebConfigurationManager ,看看它是否为您提供了您无法使用 ConfigurationManager 做的任何事情并改用它,否则使用 ConfigurationManager 将使您的代码更容易在 Web 和桌面应用程序之间无缝使用。

于 2009-03-30T17:22:48.330 回答
4

尽管 WebConfigurationManager 位于 System.Web 程序集中,但它返回的 ConnectionStringSettingsCollection 位于 System.Configuration 中。

如果您收到错误

无法使用 [] 将索引应用于“System.Configuration.ConnectionStringSettingsCollection”类型的表达式

在尝试访问数组索引时...

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

确保您有对程序集 System.Configuration 的引用

于 2015-01-31T11:28:29.600 回答
3

不确定您对连接字符串的含义。

调用WebConfigurationManager.ConnectionStrings会返回一个 System.Configuration.ConnectionStringSettingsCollection,这与调用ConfigurationManager.ConnectionStrings时得到的结果相同。

否则,正如 XOR 所说,它旨在处理多个分层 web.config,当您在应用程序中移动文件夹时根据需要组合它们。

于 2009-03-30T19:52:58.547 回答