首页 > 解决方案 > 在 ASP.NET 和 IIS 中部署时覆盖 Web 配置文件

问题描述

我们将 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 中解决这类问题的最佳实践是什么?

标签: asp.netiis

解决方案


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/如何在 iis 配置中使用锁定

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


推荐阅读