如何对 mailSettings 文件执行 XML 变量替换?
Posted
技术标签:
【中文标题】如何对 mailSettings 文件执行 XML 变量替换?【英文标题】:How to perform XML variable substitution on mailSettings file? 【发布时间】:2021-05-20 05:18:46 【问题描述】:我们有一个带有以下 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
我已经启用了,但是它怎么知道要转换 mailSettings.config 模板文件呢?
这是 XmlVariableSubstitution 开关的说明:
在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目匹配。变量替换在配置转换后运行。
注意:如果在发布管道和环境中定义了相同的变量,则环境变量将取代发布管道变量。
【问题讨论】:
【参考方案1】:在您的情况下,标准替换将不起作用,因为您已经发现:
在构建或发布管道中定义的变量将与任何配置文件和 parameters.xml 的 appSettings、applicationSettings 和 connectionStrings 部分中的“key”或“name”条目相匹配。变量替换在配置转换后运行。
您仍然可以通过使用扩展来实现您的目标 - Replace Tokens
对于默认任务配置,您需要更改文件以将令牌定义为 #VARIABLE_NAME#
。所以你的情况是:
<smtp from="reports@companyxyz.com" deliveryMethod="Network">
<network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="#USER_NAME#" password="#PASSWORD#" />
</smtp>
还要确保放置正确的目标文件。
【讨论】:
有趣!我安装了替换令牌,“还要确保放置正确的目标文件。”是什么意思?喜欢你说的路径吗? 是的,你的文件的路径。 如果我在配置文件中创建了管道变量userName
和password
,它们应该是:userName="#userName#" password="#password#"
对吧?我是否也将此任务放在 Azure App Deploy 任务之前?还是之后?
好的,要求稍微改变一下:我们不想替换用户名和密码值,而是希望将 web 配置中的这一行:<smtp configSource="mailSettings.config" />
替换为值为<smtp from="reports@companyxyz.com" deliveryMethod="Network"> <network enableSsl="true" host="smtp.sendgrid.net" port="587" userName="" password="" /> </smtp>
的管道变量。此外,由于开发人员不想更改 web 配置文件以适应替换令牌任务所需的前缀和足够的内容,我们希望使用自定义令牌前缀,例如:<mailSettings>
以上是关于如何对 mailSettings 文件执行 XML 变量替换?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Web.config 读取 system.net/mailSettings/smtp
如何解决“服务不可用,关闭传输通道。服务器响应是:服务器忙,连接太多“