Как заменить OpenExeConfiguration в веб-контексте (asp.net mvc 1)
ОК, поэтому у нас есть что-то, что в настоящее время использует 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), либо жалуется на ошибку:
{System.Configuration.ConfigurationErrorsException: Произошла ошибка при загрузке файла конфигурации: Не удалось сопоставить путь '/'. --- > System.InvalidOperationException: Не удалось сопоставить путь '/'.
Изменить -
Итак, комбинация
config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
И работа с Visual Studio 2008, когда работал Администратор. Я надеюсь, что мы не столкнемся с проблемами безопасности/разрешения при развертывании в наших средах веб-сервера и клиента!
Ответы
Ответ 1
Итак, в конце концов я использовал этот код (должен был обрабатывать, работало ли веб-приложение или выполнялся код нашего модульного теста).
System.Configuration.Configuration config = null;
if (System.Web.HttpContext.Current != null && !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 щелчок правой кнопкой мыши и запускать от имени администратора :)