我在使用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
成功,无论主目录是否为正确设定?是否存在其他差异,例如关于访问控制的假设?
答案 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管理器专门用于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
元素。
这些管理员位于不同的程序集中。
答案 1 :(得分:1)
第一类提供对一般客户端配置文件(例如app.config)的访问,第二类提供对Web应用程序文件(例如web.config)的访问。