如何在部署时使用变量而不是 XML 转换来转换 Web.Config?

How to transform Web.Config using variables instead of XML transform at deployment?

我们目前有以下 Web.Release.config 文件在部署时转换 Web.config

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
  </system.web>
  <elmah>
    <errorLog xdt:Transform="Remove" />
    <errorMail xdt:Transform="Remove" />
    <errorMail xdt:Transform="Insert" from="reports@companyxyz.com" to="a23cv@companyxyzteam.slack.com" subject="Dashboard Error" async="true" smtpPort="587" smtpServer="smtp.sendgrid.net" userName="apikey" password="password123" />
  </elmah>
</configuration>

如您所见,配置文件包含敏感信息,例如 password

管道工件包含脚本、内容、捆绑包以及与此问题最相关的 Web.Debug.configWeb.Release.configWeb.config:

发布工件时,发布管道触发 Azure 应用服务任务部署:

steps:
- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy Azure App Service'
  inputs:
    azureSubscription: '$(Parameters.ConnectedServiceName)'
    appType: '$(Parameters.WebAppKind)'
    WebAppName: '$(Parameters.WebAppName)'
    enableCustomDeployment: true
    TakeAppOfflineFlag: false
    RenameFilesFlag: false
    enableXmlTransform: true

而不是 XML 转换是改变 password 甚至 to 电子邮件属性的转换,我们希望将它们存储为变量,可能在发布管道(可能创建一个包含这些 attributes/values 的 elmah 组)并使用这些变量来转换 Web.config 文件。 当然,我们仍然希望发生其他 XML 转换设置,例如 <system.web>,但我们希望 <elmah> 中的属性使用变量而不是 [=48] 进行转换=] 文件.

我们怎样才能做到这一点? 我知道如何创建变量,但我不确定如何或是否可以使用变量而不是 Web.Debug.configWeb.Release.config

来转换 Web.config 文件

是否有 setting/task 可以做到这一点?

I am not sure how or if its even possible to transform the Web.config file using variables instead of the Web.Debug.config or Web.Release.config

我们可以安装扩展 Replace Tokens,添加变量并将变量设置为机密,然后添加任务 Replace Tokens 以替换 web.configure 变量并在 Azure DevOps 管道中使用它。

更新1

打开.csproj文件并添加字段<CopyToOutputDirectory>Never</CopyToOutputDirectory>,它不会复制Web.Release.config文件。

<None Include="Web.Release.config">
      <DependentUpon>Web.Release.config</DependentUpon>
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>