System.Web.Configuration.WebConfigurationManager和System.Configuration.ConfigurationManager之间的行为差​​异

时间:2010-01-13 23:06:27

标签: c# asp.net behavior configurationmanager webconfigurationmanager

我在使用ASP.NET网站的测试服务器上遇到了一些麻烦。我傻了,有了家 默认网站的目录指向错误的地方。我试过的时候:

ConfigurationManager.ConnectionStrings["connectionString"]; 

它返回null,但是

using System.Web.Configuration;

/* ... */

var rootWebConfig =
    WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;` 

返回正确的连接字符串。

这两种方法之间有什么区别?

编辑:我真正要问的是,为什么ConfigurationManager方法在主目录设置不正确时失败,否则成功,WebConfigurationManager成功,无论主目录是否为正确设定?是否存在其他差异,例如关于访问控制的假设?

2 个答案:

答案 0 :(得分:31)

试试这个:

在ConfigurationManager语句所在的位置放置一个断点,然后在“立即输出”窗口中运行以下命令     ((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation 。我的计算机报告 来源: “C:\ Users \ John \ Documents \ Visual Studio 2008 \ Projects \ StackOverflowCode \ WebApplication1 \ web.config”如下所示。

注意:以下内容还显示我正在访问ASP.NET web.config。

{System.Configuration.ElementInformation}
    Errors: {System.Configuration.ConfigurationException[0]}
    IsCollection: true
    IsLocked: false
    IsPresent: true
    LineNumber: 17
    Properties: {System.Configuration.PropertyInformationCollection}
    Source: "C:\\Users\\John\\Documents\\Visual Studio 2008\\Projects\\StackOverflowCode\\WebApplication1\\web.config"
    Type: {Name = "ConnectionStringsSection" FullName = "System.Configuration.ConnectionStringsSection"}
    Validator: {System.Configuration.DefaultValidator}

当我运行ConfigurationManager.ConnectionStrings.ElementInformation时,我得到 来源 :null ,这对我的网络应用来说是正确的。

您获得了什么配置源路径???


立即假设

ConfigurationManager.ConnectionStrings["connectionString"];可能会查找配置位置,该位置不一定与Web应用程序的根web.config相同。可能它在Windows目录中(例如在不同的地方或machine.config)。尽管如此,试图找到一个合适的测试。


每位经理的意图

System.Configuration.ConfigurationManager可以访问.NET配置XML格式,这意味着它同时读取:

  • Web配置(即ASP.NET中的web.config文件)
  • 和非网络配置(例如app.config文件 - 独立控制台应用,Windows应用等)

并表达配置类型常见的那些方面。这是一个通用的配置管理器。 (但是,尽管能够查看这两种类型的配置,但您应该将它用于应用程序配置,因为Web管理器专门用于Web配置,如下所述...)

System.Web.Configuration.WebConfigurationManager几乎完全相同,但它是配置管理器的“webified”版本,提供对ASP.NET特定于Web配置方面的访问(例如ASP.NET中的web.config文件)。

相似性

查看ConfigurationManager.*WebConfigurationManager.*

之间的成员相似之处

例如,两位经理都可以访问AppSettings属性和ConnectionStrings属性。实际上,这两种配置对于这两种配置都是通用的,甚至可以在XML文档中位于同一级别。

所以有很多相似之处,

行为差异

访问配置: ConfigurationManager具有相对于EXEC应用程序打开独立应用程序配置(即Myprogram.EXE的App.config)的方法,而WebConfigurationManager具有相对于其网站中的Web应用程序根目录打开ASP.NET Web配置的方法。

这是一个基本的 app.config (例如,通过 ConfigurationManager 从磁盘文件夹通过“C:\ winapp \ app.config”打开)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings/>
  <connectionStrings/>
</configuration>

这是一个基本的 web.config (例如通过 WebConfigurationManager 通过“〜”打开意味着网站的根目录)

<?xml version="1.0"?>
<configuration>  
    <appSettings/>
    <connectionStrings/>

    <system.web>
        <!-- special web settings -->
    </system.web>

</configuration>

注意相似之处。另请注意,Web配置还有一个用于ASP.NET的system.web元素。

这些管理员位于不同的程序集中。

  • ConfigurationManager: System.Configuration.dll
  • WebConfigurationManager: System.Web.dll

答案 1 :(得分:1)

第一类提供对一般客户端配置文件(例如app.config)的访问,第二类提供对Web应用程序文件(例如web.config)的访问。