Подтвердить что ты не робот

Как заменить 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, когда работал Администратор. Я надеюсь, что мы не столкнемся с проблемами безопасности/разрешения при развертывании в наших средах веб-сервера и клиента!

4b9b3361

Ответ 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 щелчок правой кнопкой мыши и запускать от имени администратора :)