Внешние файлы конфигурации с elmah - PullRequest
25 голосов
/ 22 июля 2010

Я использую 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 isсчастлив и работает нормально, однако для elmah я получаю ошибку

Parser Error Message: The attribute 'configSource' cannot be specified because its name starts with the reserved prefix 'config' or 'lock'.

Что больно, файл elmah определенно есть, но что-то не в порядке.

Что может быть причинойэто?

Ответы [ 2 ]

42 голосов
/ 02 августа 2010

Причина, по которой вы не можете использовать элемент 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>

Недостатком является то, что вам нужнофайл конфигурации для каждого раздела.Но вы часто делаете это для проектов веб-развертывания.

1 голос
/ 27 июля 2010

Я добавил вознаграждение к этому вопросу, поскольку я также хотел бы знать ответ на него.

Мне это нужно, потому что я использую функциональность Web Deployment, которая заменяет файлы их атрибутом configSource.*

Тем временем вы можете переместить содержимое elmah.config в ваш web.config, заменив <elmah configSource="..." />.

...