为每个发布环境的 Azure 网站部署转换 web.config

Transform web.config for Azure Website Deployment for each release environment

在 Visual Studio Team Services(在线 Visual Studio)中,我有三个发布环境,每个环境都有一个 Azure 网站部署步骤。

我可以通过指定获取 Web.Uat.config.

的 "BuildConfiguration" 变量(例如 Uat)来转换构建步骤的 web.config

但是我有多个使用此构建配置的发布环境,它们都需要转换 Web 配置(例如 Dev、Test、Uat、Live)。

是否可以在 Azure 网站部署步骤之前指定用于每个发布环境的 Web 配置转换?

注意:我知道可以在 "All Settings" 下的 Azure 门户中为网站指定简单的应用程序设置和连接字符串,但我需要做的不仅仅是转换这些简单的设置,而且我已经配置了 Web 配置转换对于我的解决方案中的每个环境

Web.config是在构建过程中转换的,如果你从"Build"生成部署包,然后在"Release"中部署,那么你不能在部署前转换它。

您可以使用 Web Deploy Parameterization to update the values in web.config before deployment. More information for your reference: Web Deploy Parameterization vs Web.config Transform.

您也可以在部署前使用Replace Tokens任务替换web.config文件中的值。

作为 Release Management Utility Tasks 一部分的分词器任务允许根据环境转换配置文件。

可以使用包含所有环境的所有配置的单个 JSON 配置文件,任务将根据环境自动选择正确的配置。

{
  "<environment>": {
    "CustomVariables": {
    "Variable1": "value1",
    "Variable2": "value2",
  },
    "ConfigChanges": [
        {
          "KeyName": "/configuration/appSettings/add[@key='ServiceURL']",
          "Attribute":"value",
          "Value":"https://ServiceURL"
        },
        {
          "KeyName": "/configuration/appSettings/add[@key='EnableDebugging']",
          "Attribute":"value",
          "Value":"false"
        },
        {
          "KeyName":“/configuration/connectionStrings/add[@name='databaseentities']”,
          "Attribute": "connectionString",
          "value": "Integrated Security=True;Persist Security Info=False;Initial Catalog=DB;Data Source=servername"
        }
    ]
}

像这样,您可以在一个 JSON 文件中拥有多个环境及其配置,并且分词器任务将根据正在进行部署的环境修改您的配置。

阅读上面的详细信息 link 以了解更多信息。