【问题标题】:How to perform XML Element substitution in web.config using Replace Tokens?如何使用替换令牌在 web.config 中执行 XML 元素替换?
【发布时间】:2021-05-31 13:20:17
【问题描述】:

我们有一个带有以下 system.net mailSettings 属性的 Web.config 文件:

  <system.net>
    <mailSettings>
      <smtp configSource="mailSettings.config" />
    </mailSettings>
  </system.net>

我们希望将网络配置中的这一行:&lt;smtp configSource="mailSettings.config" /&gt; 替换为一个值为 &lt;smtp from="reports@companyxyz.com" deliveryMethod="Network"&gt; &lt;network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="apiKey" password="12346576fgb" /&gt; &lt;/smtp&gt; 的管道变量。

另外,由于开发者不想更改 web 配置文件以适应替换令牌任务所需的前缀和后缀,我们希望使用自定义令牌前缀,例如:&lt;mailSettings&gt; 和后缀:&lt;/mailSettings&gt;

steps:
- task: qetza.replacetokens.replacetokens-task.replacetokens@4
  displayName: 'Replace tokens in **/*.config'
  inputs:
    tokenPattern: custom
    tokenPrefix: '<mailSettings>'
    tokenSuffix: '</mailSettings>'

以上可以实现吗? 我还要将此替换令牌任务放在 Azure App Deploy 任务之前吗?还是之后?

【问题讨论】:

  • 您尝试过您的步骤吗?有效果吗?

标签: azure-devops azure-pipelines-release-pipeline


【解决方案1】:

以上可以实现吗?

是的。这是可以实现的。

替换令牌任务使用 Pipeline 变量设置 Web.config 文件中的值。

在您的情况下,变量名称是&lt;smtp configSource="mailSettings.config" /&gt;

并且在替换过程中,前缀和后缀会同时被替换。

所以你可以尝试设置变量:

<smtp configSource="mailSettings.config" /> : <mailSettings> <smtp configSource="AA.config" /></mailSettings>

这是一个例子:

定义:

- task: qetza.replacetokens.replacetokens-task.replacetokens@3
  displayName: 'Replace tokens in web.config'
  inputs:
    rootDirectory: '$(build.sourcesdirectory)'
    targetFiles: web.config
    tokenPrefix: '<mailSettings>'
    tokenSuffix: '</mailSettings>'

结果:

我还要将此替换令牌任务放在 Azure 应用部署任务之前吗?还是之后?

您需要在 Azure App Deploy 任务之前添加此任务。

然后更改将应用​​于 Azure App Deploy 任务。

更新:

正如 Cataster 在 cmets 中所说:

以下是 Azure App Service Task 中的两个关键点:

  1. 确保我的 Azure App Deploy Task packageForLinux 属性必须设置为 $(System.DefaultWorkingDirectory)/Build Artifact Name/ArtifactName

  2. 在 Azure App Deploy 任务中禁用 XML 转换选项,替换的令牌格式将与管道变量中的格式相同。但如果我们启用此选项,它会将其格式化/转换为整洁的 XML

【讨论】:

  • 很有趣,谢谢凯文。由于令牌前缀和后缀分别为&lt;mailSettings&gt; and &lt;/mailSettings&gt;,因此变量值是否必须仅为&lt;smtp configSource="AA.config" /&gt;
  • 根据我的测试,如果变量值没有加上,前缀和后缀都会丢失。它将导致网络。 config 无法保持原始格式。所以这是必需的。如果不添加,格式会从&lt;mailSettings&gt; AA &lt;/mailSettings&gt;变为AA
  • 成功了!非常感谢!我必须确保的一件事是我的 Azure App Deploy Task packageForLinux 属性必须设置为 '$(System.DefaultWorkingDirectory)/Build Artifact Name/ArtifactName' 否则不会发生更改。我还注意到,如果我在 Azure App Deploy 任务中禁用 XML 转换选项,则替换的令牌格式将与管道变量中的格式相同:丑陋的长 XML 元素。但如果我启用它,它会将其格式化/转换为整洁的 XML :)
  • 太棒了!很高兴知道它现在可以工作了。如果答案可以给你一些帮助,你可以考虑接受它。谢谢。
  • 当然是的 :) 你想为未来的读者添加我的 cmets 吗?如果有人按照这些步骤操作但在 Azure App Deploy 中设置了错误的包,这可能会有所帮助
猜你喜欢
  • 2011-04-07
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多