如何防止在更新网站时使用webdeploy覆盖web.config

本文关键字:webdeploy 覆盖 web config 何防止 更新 网站 | 更新日期: 2023-09-27 18:24:59

我有一个c#网站,我一直在通过iis7/webdeploy进行部署,效果很好。问题是当我更新网站时,web.config文件会被覆盖。该文件包含数据库连接和其他一些特定于其站点的设置。自发布以来,我一直在通过登录、复制web.config、重新运行导入和重新处理web.config来更新他们的网站。我有几次因为忘记这样做而搞砸了自己,这给我带来了很多额外的工作。然而,现在我正在努力将web界面作为我的自动化部署的一部分,所以我需要弄清楚为什么它会覆盖网站的当前配置。

有人知道为什么web.config被覆盖和/或如何修复它,使其不再这样做吗?

谢谢!Scott

如何防止在更新网站时使用webdeploy覆盖web.config

使用web部署时有两个选项:

  • 参数化
  • Web.config转换

使用参数化时,可以指定在部署包期间可以修改的设置。例如,您可以为连接字符串、WCF配置或应用程序设置创建参数。管理员现在部署应用程序时,可以修改当前安装的所有设置。当您将一个包部署到多个环境时,这种方法非常有用。使用XmlPoke之类的东西,您可以完全自动化这个过程。

有关如何使用参数的完整说明,请参阅:Web应用程序包参考。

Web.config转换在编译时完成。通过创建多个配置,您可以使用XSLT更改web.config文件中的值。这些更改将在生成包时应用。SlowCheetah是一个很好的工具,可以帮助您测试转换。通过创建特定的配置(例如:暂存、测试、生产),您可以在部署管道中使用这些配置来正确配置所有设置。

有关如何使用web.config转换的更多信息,请参阅:使用Visual Studio 部署web项目的web.config转换语法

参数化给你更多的自由,但也更复杂。Web.config转换很容易使用,当您提前了解要部署到的环境时,就可以使用它。

将Web.config文件的"Build Action"更改为"None"对我有效。请记住,如果您要部署到一台新机器上,则必须更改此设置。

听起来您需要配置web.config转换。看看这里:

http://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx

对于.NET Core,简单的答案是不使用web.config,而是在发布配置文件中指定环境。这反过来又为您设置web.config

对于Windows IIS部署:包括<EnvironmentName>属性在发布配置文件(.pubxml)或项目文件中。此方法设置发布项目时web.config中的环境:

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

来源:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/environments