asp.net - 在 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 覆盖。
有两种可能的解决方案:
- 在每次部署代码之前,将 web.config 与服务器和代码库合并。
- 在不同的配置文件中解耦应用程序配置和 IIS 配置。
我的问题是,在 ASP.NET 中解决这类问题的最佳实践是什么?
解决方案
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 文件中管理默认文档。
推荐阅读
- ios - 将 self 作为块中的参数不会导致循环引用,但对 self 的外部引用会
- tensorflow - 在 tf 图中用张量裁剪张量
- php - 比较shell中的日期数和输入数
- java - JFrame 不显示来自 JLabel 的图片
- python - RDD没有在pyspark中保存为文本文件
- visual-studio - 如何在 Visual Studio 2015 中删除“许可证产品密钥”
- android - 重新加载时如何停止刷新gif图像
- android - 自定义相机新捕获的图像覆盖旧图像
- angular - 来自@Input 的响应式表单 setValue
- react-native - 在反应中更改抽屉导航器后,后退按钮处理程序在每个屏幕上工作 - 本机