25

我正在使用 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 文件肯定在那里,但有些不开心。

这可能是什么原因造成的?

4

2 回答 2

42

不能将 configSource 元素用于 elmah 的原因是因为 elmah 被定义为 sectionGroup。您可以在 Sections 上使用 configSource。这就是它在 log4net 上工作的原因。

如果您需要像 Dan Atkinson 这样的用于 Web 部署的单独配置文件,您可以执行以下操作:

<?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 部署项目这样做。

于 2010-08-02T13:36:20.793 回答
1

我已经为这个问题添加了赏金,因为我也想知道这个问题的答案。

我需要它,因为我使用了 Web 部署功能,它用 configSource 属性替换文件。

同时,您可以将 elmah.config 的内容移动到您的 web.config 中,替换<elmah configSource="..." />.

于 2010-07-27T09:51:13.937 回答