【问题标题】:Machine-variable web.config elements?机器变量 web.config 元素?
【发布时间】:2010-11-25 07:26:07
【问题描述】:

有没有办法在 web.config 中指定机器特定的值?例如:在生产中,我希望 <customErrors> 节点重定向到特定页面以显示用户友好的错误处理页面,但在开发、测试和暂存中,我希望 <customErrors mode="Off" /> 可以看到尽可能多的细节.

目前可以吗?

【问题讨论】:

    标签: asp.net web-config


    【解决方案1】:

    对于 ASP.NET 2 及更高版本,许多配置元素现在支持“configSource”属性,允许您将该部分的内容替换为外部文件。这可以让您在主 web.config 中进行常规设置,然后为您知道将在每个环境中更改的部分单独设置文件。

    正如 Nathan 指出的那样,在这种情况下,您可以使用 RemoteOnly 模式,当您在“localhost”上浏览网站时会显示完整错误 - 如果您不是在 LocalHost 上开发,那么这将无济于事你。

    VS2010 将添加一个新功能,您可以在其中根据构建目标修改配置文件,因此发布或生产构建可以自动将其设置为“开启”,而调试或暂存可能会将其设置为“关闭”。

    另一种选择是挂钩 global.asax 中的 Application_Error 事件,如果用户以某种管理员身份登录,则输出堆栈跟踪,否则显示错误页面。

    【讨论】:

    • 好的,所以当我执行 之类的操作时,它不起作用。我喜欢 configSource 属性的想法,但是如果我无法引用相对根目录之外的文件(只需一个文件夹就足够了),那么当我推送到 dev 时,我将返回手动调整 web.config 文件和测试服务器。
    • 顺便说一句,我也尝试了以下 sytanxes,但没有成功:
    • 否 -- 不在本地主机上浏览。我正在发布到测试服务器,但 Q/A 告诉我他们正在获得“没有错误信息的通用黄屏”。
    • 没关系。我看到 configSource 中引用的文件必须在相对根目录内(stackoverflow.com/questions/569117/…)。除非在 webConfig 中存在通配符方案,否则我将不得不手动调整每台服务器上的 web.config。 ScottGu:你不能找人来解决这个问题吗???
    • 抱歉,是的,它需要在应用程序中——老实说,VS2010 功能只有在您为每个环境进行不同构建时才真正有帮助,这可能会导致其他问题(即您投入生产的构建尚未通过质量检查......)。要做的事情是从源代码控制/部署脚本中排除外部文件,并单独添加/生成一个。
    【解决方案2】:

    我正在撰写并接受我自己的答案,因为我提出的问题没有答案。对于路径:

    C:\inetput\wwwroot

    其中 wwwroot 是相对根目录,我的目标是将 <customErrors> 的机器特定指令放在 inetpub 目录中,以便 XCopying 新代码自动获取外部配置文件中已建立的机器设置。可以通过编辑 machine.config 文件来做到这一点,但这种解决方案的级别太低了(在服务器管理员执行此操作之前,需要管理员在纸上签名)。

    因此,我将坚持现状,为开发、测试和登台服务器编辑 web.config 文件。

    【讨论】:

      【解决方案3】:

      <customErrors mode="RemoteOnly"> 会为你做这件事。

      【讨论】:

      • 仅当测试和舞台环境恰好是开发 PC 时,我对此表示怀疑。
      【解决方案4】:

      如果你做

      <customErrors mode="RemoteOnly">
      

      然后您将在 Web 服务器机器上看到详细的错误消息,但在所有远程机器上都会看到友好的错误消息(您需要在 web.config 中指定)。

      【讨论】:

        【解决方案5】:

        这不是 .config 文件的用途吗?不同环境的不同配置?对于网站,我们始终为每个环境提供不同的 web.config(引用不同的连接字符串等......)不过,Nathan Taylors 的回答对于您的具体问题是正确的。

        【讨论】:

        • 关键是网站是一样的,我们只是在开发、测试、登台和生产服务器之间移动。如果我可以让 configSource 属性在子配置文件位于 web 根目录之外的地方工作,那么我可以将特定于机器的文件——永远不需要更新——放在有问题的服务器上,而 web 配置只是简单的在一个目录中查找它所在机器所需的详细信息。
        猜你喜欢
        • 1970-01-01
        • 2021-11-22
        • 2011-07-07
        • 1970-01-01
        • 2016-03-23
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        相关资源
        最近更新 更多