【问题标题】:Overriding web config file at the time of deployment in ASP.NET and IIS在 ASP.NET 和 IIS 中部署时覆盖 Web 配置文件
【发布时间】:2019-04-13 06:11:47
【问题描述】:

我们将 ASP.NET 用于托管在 IIS 8.5 中的 Web 应用程序。 ASP.NET 使用 web.config 文件来存储所有应用程序和 IIS 相关的配置。每当我们为 Web 应用程序部署新版本的代码时,我们也会部署 web.config 文件。

最近运营团队对该部署过程提出了担忧。他们说,如果有人更改了 IIS 中的某些设置并且该 web.config 已为此更新,则开发人员无法知道该更改,以便他们可以更新代码库(版本控制系统)中的 web.config。所以最终在下一次部署时,web.config 更改将被旧的 web.config 覆盖。

有两种可能的解决方案:

  1. 在每次部署代码之前,将 web.config 与服务器和代码库合并。
  2. 在不同的配置文件中解耦应用程序配置和IIS配置。

我的问题是,在 ASP.NET 中解决这类问题的最佳实践是什么?

【问题讨论】:

  • 了解您的运营团队想要进行哪些更改更为重要。他们想要的大部分更改,都可以作为位置标签添加到applicationHost.config,以便不同的团队(开发人员/运营)管理不同的文件(web.config/applicationHost.config)。您所说的“将应用程序配置和IIS配置在不同的配置文件中解耦”是什么意思?我宁愿认为应该逐案处理。至少来自 Microsoft 文档的“最佳实践”。

标签: asp.net iis


【解决方案1】:

IIS 7+ 引入了它的分布式配置,允许 IIS 和 .NET 配置存在于 Site/App/Directory web.config 文件中。其主要原因之一如下:在 IIS 6 中,每当应用程序团队需要部署其应用程序并更改默认文档等设置时,他们都需要 IIS 团队参与,因为“默认文档”是 IIS 配置设置。您可能会争辩说,特定应用程序的默认文档设置不是 IIS 配置,而是应用程序配置。因此,应用程序团队应该拥有该配置设置并将其部署为应用程序的一部分。

关于 IIS7+ 配置系统的更多信息:管理员能够配置允许在 Web.config 文件中设置的设置。例如,默认情况下,可以在 Web.config 文件中设置“默认文档”,而 Windows 身份验证等身份验证设置则不能。实现实际上可能会变得复杂,但如果您想了解它,可以在此处查看:https://docs.microsoft.com/en-us/iis/get-started/planning-for-security/how-to-use-locking-in-iis-configuration

最终,最好的做法是让 IIS 管理员配置他们希望应用程序团队管理的设置(通过将这些设置委托给 Web.config),然后不要碰它们。换句话说,如果需要更新默认文档,那么这是应用程序团队的责任,他们会发布一个新的 web.config 文件。如果 IIS 团队决定要管理 Default Document,那么他们需要锁定 IIS 配置系统以禁止在 web.config 文件中管理 Default Document。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多