【发布时间】:2010-11-25 07:26:07
【问题描述】:
有没有办法在 web.config 中指定机器特定的值?例如:在生产中,我希望 <customErrors> 节点重定向到特定页面以显示用户友好的错误处理页面,但在开发、测试和暂存中,我希望 <customErrors mode="Off" /> 可以看到尽可能多的细节.
目前可以吗?
【问题讨论】:
标签: asp.net web-config
有没有办法在 web.config 中指定机器特定的值?例如:在生产中,我希望 <customErrors> 节点重定向到特定页面以显示用户友好的错误处理页面,但在开发、测试和暂存中,我希望 <customErrors mode="Off" /> 可以看到尽可能多的细节.
目前可以吗?
【问题讨论】:
标签: asp.net web-config
对于 ASP.NET 2 及更高版本,许多配置元素现在支持“configSource”属性,允许您将该部分的内容替换为外部文件。这可以让您在主 web.config 中进行常规设置,然后为您知道将在每个环境中更改的部分单独设置文件。
正如 Nathan 指出的那样,在这种情况下,您可以使用 RemoteOnly 模式,当您在“localhost”上浏览网站时会显示完整错误 - 如果您不是在 LocalHost 上开发,那么这将无济于事你。
VS2010 将添加一个新功能,您可以在其中根据构建目标修改配置文件,因此发布或生产构建可以自动将其设置为“开启”,而调试或暂存可能会将其设置为“关闭”。
另一种选择是挂钩 global.asax 中的 Application_Error 事件,如果用户以某种管理员身份登录,则输出堆栈跟踪,否则显示错误页面。
【讨论】:
我正在撰写并接受我自己的答案,因为我提出的问题没有答案。对于路径:
C:\inetput\wwwroot
其中 wwwroot 是相对根目录,我的目标是将 <customErrors> 的机器特定指令放在 inetpub 目录中,以便 XCopying 新代码自动获取外部配置文件中已建立的机器设置。可以通过编辑 machine.config 文件来做到这一点,但这种解决方案的级别太低了(在服务器管理员执行此操作之前,需要管理员在纸上签名)。
因此,我将坚持现状,为开发、测试和登台服务器编辑 web.config 文件。
【讨论】:
<customErrors mode="RemoteOnly"> 会为你做这件事。
【讨论】:
如果你做
<customErrors mode="RemoteOnly">
然后您将在 Web 服务器机器上看到详细的错误消息,但在所有远程机器上都会看到友好的错误消息(您需要在 web.config 中指定)。
【讨论】:
这不是 .config 文件的用途吗?不同环境的不同配置?对于网站,我们始终为每个环境提供不同的 web.config(引用不同的连接字符串等......)不过,Nathan Taylors 的回答对于您的具体问题是正确的。
【讨论】: