首页 > 解决方案 > 如何对 mailSettings 文件执行 XML 变量替换?

问题描述

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

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

mailSettings.config 文件位于项目子根目录下,仅包含以下几行:

<smtp from="reports@companyxyz.com" deliveryMethod="Network">
  <network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="" password="" />
</smtp>

我们希望将用户名和密码属性存储为发布管道中的变量(最终在 Azure Key Vault 中,但不在此范围内),并且在 Azure 应用程序部署任务(下面的 yaml)中有一个用于 XML 变量转换的选项/替代。

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
    enableXmlVariableSubstitution: true

图像.png

我已启用它,但它如何知道转换 mailSettings.config 模板文件?

这是 XmlVariableSubstitution 开关的描述:

在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目匹配。变量替换在配置转换后运行。

注意:如果在发布管道和环境中定义了相同的变量,则环境变量将取代发布管道变量。

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

解决方案


在您的情况下,标准替换将不起作用,因为您已经发现:

在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目匹配。变量替换在配置转换后运行。

您仍然可以通过使用扩展来实现您的目标 -替换令牌

对于默认任务配置,您需要更改文件以将令牌定义为#{VARIABLE_NAME}#. 因此,在您的情况下,它将是:

<smtp from="reports@companyxyz.com" deliveryMethod="Network">
  <network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="#{USER_NAME}#" password="#{PASSWORD}#" />
</smtp>

还要确保放置正确的目标文件。


推荐阅读