如何在 web.config 中转换邮件设置,而无需在源代码管理中具有凭据



我有一个使用 VSTS 部署到 Azure 应用服务的 Web 应用。到目前为止,我已经成功地使用配置转换和变量替换,能够在源代码管理中没有任何敏感信息,但我无法弄清楚如何为 system.net/mailSettings/smtp/network 中的 smtp 凭据执行此操作。

有人有什么想法吗?

好的,经过一番挖掘,并四处询问,似乎使用 WebDeploy 和参数.xml正在工作。

这是我所做的:

  1. 我将插件替换令牌添加到我的 VSTS 帐户。
  2. 我在网站项目中添加了一个参数.xml,它看起来像这样:

    <?xml version="1.0" encoding="utf-8"?>
    <parameters>
    <parameter name="Mail.Username" description="The username used for smtp authentication" defaultValue="#{Mail.UserName}#" tags="">
    <parameterEntry kind="XmlFile" scope="obj\Release\Package\PackageTmp\Web.config$" match="/configuration/system.net/mailSettings/smtp/network/@userName" />
    </parameter>
    <parameter name="Mail.Password" description="The password used for smtp authentication" defaultValue="#{Mail.Password}#" tags="">
    <parameterEntry kind="XmlFile" scope="obj\Release\Package\PackageTmp\Web.config$" match="/configuration/system.net/mailSettings/smtp/network/@password" />
    </parameter>
    </parameters>
    
  3. 我的生成步骤
  4. 已设置为输出包,但这些是生成步骤所需的 MSBuild 参数。/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation=”$(build.artifactstagingdirectory)\”,如果你像我一样,正在对连接字符串进行配置转换,你可能还希望将/p:AutoParameterizationWebConfigConnectionStrings=false添加到该参数列表中。

  5. 在发布配置中,在">部署到 Azure 应用服务"步骤之前,使用上述"替换令牌"插件添加一个步骤。我坚持使用替换值的默认语法,但这些语法可以更改。由于我使用的是所有默认值,因此我在根目录$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop目标文件中运行任务*.SetParameters.xml

  6. 然后在"部署到 Azure 应用服务"步骤中,我选择了"使用 Web 部署发布"选项,对于我使用的SetParameters 文件$(System.DefaultWorkingDirectory)/$(Build.DefinitionName)/drop/<Name of Web Project>.SetParameters.xml

  7. 在"部署
  8. 后操作"下,将"部署脚本类型"设置为"内联脚本",然后添加以下脚本。

    @echo off
    del parameters.xml
    

    这是因为默认情况下不提供 .config 文件,但.xml文件提供,否则您的parameters.xml将位于您的 Web 根目录中不受保护,您的 smtp 用户名和密码为纯文本。

  9. 接下来,添加名为Mail.UsernameMail.Password发布变量,并填写它们的值。我把Mail.Password定为秘密。

  10. 签入所有内容,并触发构建和发布!

最新更新