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

时间:2013-07-26 11:54:43

标签: c# iis-7 webdeploy

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

有谁知道为什么web.config被覆盖和/或如何修复它所以它不再那样做了?

谢谢!    斯科特

4 个答案:

答案 0 :(得分:8)

使用Web部署时有两种选择:

  • 参数
  • Web.config转换

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

有关如何使用参数的完整说明,请参阅:Reference for the Web Application Package

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

有关如何使用web.config转换的详细信息,请参阅:Web.config Transformation Syntax for Web Project Deployment Using Visual Studio

参数化为您提供更多自由,但也更复杂。 Web.config转换易于使用,并且可以在您预先知道要部署到的环境时使用。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

将Web.config文件的“生成操作”更改为“无”对我来说很有效。 请记住,如果要部署到新计算机,则必须更改此设置。

答案 3 :(得分:0)

从.NET Core开始,简单的答案是不使用 web.config 并在发布配置文件中指定环境。依次为您设置 web.config

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

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

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