#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))
не требуется