Внешние файлы конфигурации с elmah
Я использую elmah (v1.1.11517.0) и пытаюсь перенести конфигурацию на внешний источник.
Мой конфиг в настоящее время выглядит так:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
<section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah"/>
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net configSource="Settings\RobDev\log4net.config" />
<elmah configSource="Settings\RobDev\ELMAH.config" />
</configuration>
log4net доволен и работает нормально, однако для elmah я получаю ошибку
Parser Error Message: The attribute 'configSource' cannot be specified because its name starts with the reserved prefix 'config' or 'lock'.
Который является болью, файл elmah определенно есть, но что-то не устраивает.
Что может быть причиной этого?
2 ответа
Причина, по которой вы не можете использовать элемент configSource для elmah, заключается в том, что elmah определяется как sectionGroup. Вы можете использовать configSource на разделах. Вот почему он работает на log4net.
Если вам нужен отдельный конфигурационный файл для веб-развертывания, такой как Дэн Аткинсон, вы можете сделать следующее:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah"/>
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>
<section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah"/>
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net configSource="Settings\RobDev\log4net.config" />
<elmah>
<errorLog configSource="Settings\RobDev\errorLog.config" />
<errorMail configSource="Settings\RobDev\errorMail.config" />
<errorFilter configSource="Settings\RobDev\errorFilter.config" />
<errorTweet configSource="Settings\RobDev\errorTweet.config" />
<security configSource="Settings\RobDev\security.config" />
</elmah>
</configuration>
Недостатком является то, что вам нужен файл конфигурации для каждого раздела. Но вы часто делаете это для проектов веб-развертывания.
Я добавил вознаграждение к этому вопросу, поскольку я также хотел бы знать ответ на этот вопрос.
Мне это нужно, потому что я использую функциональность Web Deployment, которая заменяет файлы их атрибутом configSource.
Тем временем вы можете переместить содержимое файла elmah.config в ваш web.config, заменив <elmah configSource="..." />
,