Как заменить OpenExeConfiguration в веб-контексте (asp.net mvc 1)

#asp.net #asp.net-mvc #c#-3.0

#asp.net #asp.net-mvc #c #-3.0

Вопрос:

Хорошо, итак, у нас есть что-то, что в настоящее время использует OpenExeConfiguration для чтения файла конфигурации, однако это не работает при запуске в веб-контексте.

Я перепробовал множество различных способов открытия web.config программно, но, похоже, я не могу заставить его прочитать правильный файл web.config. На случай, если это имеет значение, я в настоящее время отлаживаю его в VS 2008.

 1. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath);

2. config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = "web.config" }, ConfigurationUserLevel.None);

3. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");

4. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);

5.  System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
  

Он либо открывает неправильный конфигурационный файл (либо конфигурацию компьютера, либо VS / IDE / Web.config), либо жалуется на ошибку:

{Система.Конфигурация.Исключение ConfigurationErrorsException: произошла ошибка при загрузке файла конфигурации: не удалось сопоставить путь ‘/’. —> Система.Исключение InvalidOperationException: не удалось сопоставить путь ‘/’.

Редактировать — ХОРОШО, поэтому комбинация

 config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
  

И запуск Visual Studio 2008 от имени администратора сработал. Я надеюсь, что мы не столкнемся с проблемами безопасности / разрешений при развертывании в наших средах веб-сервера / клиента!

Комментарии:

1. Вы используете встроенный веб-сервер или реальный IIS? как вы выяснили, встроенный делает что-то по-другому.

2. Да, я использую встроенный веб-сервер во время разработки. Это раздражает, потому что, как я обнаружил сегодня утром, если я забываю запустить Visual Studio от имени администратора, я получаю ошибки (компьютер, должно быть, перезагрузился после обновления).

Ответ №1:

Итак, в конце концов, я использовал этот код (должен был определить, запущено ли веб-приложение или был ли запущен наш модульный тестовый код).

 System.Configuration.Configuration config = null;

if (System.Web.HttpContext.Current != null amp;amp; !System.Web.HttpContext.Current.Request.PhysicalPath.Equals(string.Empty))
        config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
else
        config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  

Также необходимо запускать Visual Studio в режиме администратора, который, как я выяснил, вы можете установить в качестве свойства в своем ярлыке, чтобы вам не нужно было каждый раз помнить, что в Windows 7 нужно щелкнуть правой кнопкой мыши и запустить от имени администратора 🙂

Комментарии:

1. amp;amp; !System.Web.HttpContext.Current.Request.PhysicalPath.Equals(string.Empty)) не требуется