Я испытал некоторые затруднения на тестовом сервере с веб-сайтом ASP.NET. Я попал впросак и имел корневой каталог веб-сайта По умолчанию, указал на неправильное место. Когда я попробовал:
ConfigurationManager.ConnectionStrings["connectionString"];
это возвратило пустой указатель, но
using System.Web.Configuration;
/* ... */
var rootWebConfig =
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;`
возвращенный корректная строка подключения.
Каковы все различия между двумя подходами?
Править: То, что я действительно спрашиваю, почему делает ConfigurationManager
приблизьтесь к сбою, когда корневой каталог будет неправильно установлен, но успешно выполнится иначе, и WebConfigurationManager
успешно выполняется независимо от того, установлен ли корневой каталог правильно? Есть ли какие-либо другие различия, такие как предположения об управлении доступом?
Поместите точку останова, где ваше утверждение ConfigurationManager является и запустить следующее в окне немедленного вывода
((конфигурация) ConfigurationManager.getsection («ConnectionStrings»)). ElementInformation
Отказ Отчеты о моей машине Источник: «C: \ Users \ John \ Documents \ Visual Studio 2008 \ Проекты \ 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 [«ConnectionStringString»];
может искать местоположение конфигурации, которое не обязательно так же, как Корень веб-приложения Web.config. Скорее всего, он выглядит в каталоге Windows (например, в другом месте или для Machine.config). Попытка найти подходящий тест для этого, хотя.
System.configuration. ConfigurationManager может получить доступ к формату .NET Configuration XML, который означает, что он читает как:
и выражает эти аспекты, которые являются общими к типам конфигурации. Это менеджер конфигурации общего назначения. (Однако, несмотря на эту способность смотреть на обоих типах конфигов, вы должны использовать его для конфигуров приложения, потому что веб-менеджер посвящен веб-конфигурации, как описано следующим ...)
System.Web.Configuration. WebConfigurationManager делает в значительной и том же, но это «Webified» версию Configuration Manager, обеспечивая доступ к веб-специфическим формам конфигурации ASP.NET (E.g. Web.config файл в ASP.NET).
См. Сходство-члена сходства между ConfigurationManager. * и WebConfigurationManager. *
Оба менеджера могут, например, доступ к Appsettings
и A ConnectionStrings
Свойство. Действительно, оба этих настроек являются общими как для обоих видов конфигурации, и даже расположены на одном уровне в документе XML.
Так что есть много сходств, однако,
доступа к конфигурации : ConfigurationManager имеет методы открытия автономных конфигуров приложения (I.E. MyProgram.exe app.config) относительно приложения exec, тогда как WebConfigurationManager имеет методы для открытия веб-конфигурации ASP.NET относительно его корневого каталога веб-приложения на веб-сайте.
Вот базовый app.config (например, открытый через "C: \ winapp \ app.config" из папки диска на ConfigurationManager )
<?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>
Обратите внимание на сходство. Также обратите внимание, что веб-конфигурация имеет дополнительные System.Web
элемент для ASP.NET.
Эти менеджеры расположены в различных сборок.
Первый класс обеспечивает доступ к файлам Config Config Config (например, App.config) и вторым для файлов веб-приложения (например, Web.config).