10

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

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

谢谢!斯科特

4

4 回答 4

9

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

  • 参数化
  • Web.config 转换

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

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

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

有关如何使用 web.config 转换的详细信息,请参阅:使用 Visual Studio 进行 Web 项目部署的 Web.config 转换语法

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

于 2013-07-26T12:19:36.243 回答
3

将 Web.config 文件的“构建操作”更改为“无”对我有用。请记住,如果您要部署到新机器,则必须更改此设置。

于 2019-04-14T17:59:14.380 回答
2

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

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

于 2013-07-26T12:00:15.797 回答
1

从 .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

于 2020-11-12T04:16:18.403 回答