OpenExeConfiguration Path Issue - PullRequest
       32

OpenExeConfiguration Path Issue

2 голосов
/ 11 ноября 2011

Я пытаюсь загрузить web.config с сервера. Он находится по адресу: \ server \ folder \ web.config

когда я попробую это:

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web.config");

он ищет: web.config.config и завершается ошибкой.

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web");

сбой, потому что нет папки \ server \ folder \ web \

Итак, я попробовал несколько вещей, и похоже, что он проверяет, существует ли файл, на который указывает путь, и затем он применяет .config и получает файл конфигурации.

Просто для развлечения я создал файл web.loaders и файл web.loaders.config. с

 ConfigurationManager.OpenExeConfiguration(@"\\server\folders\web.local");

он отлично загружает \ server \ folder \ web.local.config, но выдает исключения без файла web.local.

Итак, есть много способов загрузить эту маленькую вещь, но разве нет более приятного, чем использование временного файла .web или чего-то еще?

Ответы [ 3 ]

8 голосов
/ 11 ноября 2011

ConfigurationManager.OpenExeConfiguration предназначен для загрузки конфигурации для исполняемого файла и поэтому действительно ожидает полный путь к файлу .exe.Ожидается, что файл конфигурации находится в том же каталоге, что и .exe, и имеет расширение .exe.config, поэтому он не очень подходит для загрузки конфигурации веб-сайта ASP.NET.Лучший выбор - использовать WebConfigurationManager.Метод OpenWebConfiguration хорошо, если вы открываете конфигурацию изнутри сайта, так как он ожидает виртуальный путь к конфигурации, но если вы открываете его из чего-то вроде консольного приложения, тогда вам нужно взглянуть наOpenMappedWebConfiguration метод.Документация дает пример того, как этого можно достичь.

Также имеется предыдущий вопрос и ответ о переполнении стека, показывающий, как это сделать.

1 голос
/ 11 ноября 2011

Сначала необходимо сопоставить виртуальный путь с физическим путем.

string configPath = HttpContext.Current.Server.MapPath("~/server/folders/web.local");      
ConfigurationManager.OpenExeConfiguration(configPath);

~ В начале виртуального пути идет к корню вашего приложения.Если вы ссылаетесь на относительный файл со своей страницы, вы можете не использовать его.

0 голосов
/ 11 ноября 2011

Если предположить, что общий ресурс существует, похоже, это может быть проблема с разрешениями.Вы пытались предоставить share и folder разрешения учетной записи, под которой работает приложение?

enter image description here

...