WebConfigurationManager和ConfigurationManager有什么区别?


102

WebConfigurationManager和之间有什么区别ConfigurationManager

我什么时候应该使用另一个?

更新

我只是看着WebConfigurationManager,由于某种原因,您无法ConfigurationManager像在数组中那样访问连接字符串。谁能告诉我为什么MS会这样吗?使用来获取所需的连接字符串似乎很痛苦WebConfigurationManager

再次使用CAVEAT更新!

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


1
我认为“ caveat”不是很准确。我将system.web.configuration用于连接字符串,而无需system.configuration
sclarson 2010年

Answers:


95

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);
}

25

WebConfigurationManager是专门为ASP.NET应用程序制作的。

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

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

我建议您看一下WebConfigurationManager,看看它是否提供了您使用ConfigurationManager根本无法做的任何事情,而是使用它,否则,使用ConfigurationManager将使在Web和桌面APS之间无缝使用代码变得容易得多。


4

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

如果出现错误

无法将带有[]的索引应用于类型为'System.Configuration.ConnectionStringSettingsCollection'的表达式

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

WebConfigurationManager.ConnectionStrings["Name"].ConnectionString

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.