Azure Devops 中针对不同环境的 app.config 转换

Posted

技术标签:

【中文标题】Azure Devops 中针对不同环境的 app.config 转换【英文标题】:app.config transformations in Azure Devops for different environments 【发布时间】:2019-04-23 02:26:24 【问题描述】:

我有一个 .Net Framework 4.6.1 项目,它创建了一个 Windows 服务。我们希望通过 Azure Devops 管道构建和部署它。我们已经成功地为我们所有的 .Net Core Web 服务创建了管道(使用 ASPNETCORE_ENVIRONMENT 变量和一组 appsettings.ENV.json 文件),但是 Windows 服务在提供不同的不同环境的配置。

我已经为 App.config XML 文件进行了 XDT 转换。我可以右键单击 Visual Studio 中的文件和“预览转换”,它工作正常。

尚不清楚我如何将其转换为管道配置。 Build 任务似乎能够运行转换,但我不确定我们如何为不同的 Deploy 阶段进行不同的转换。取而代之的是,所有环境最终都会对作为构建步骤的一部分选择的构建配置应用任何转换。

我关注了许多博客文章 - 包括 this one,它声称您可以有多个构建配置,但我似乎没有设置。

我错过了什么?

【问题讨论】:

【参考方案1】:

我们对 VSTS 所做的事情我认为在较新的 Azure Devops 中是类似的。我们让转换将令牌添加到配置文件 IE "DefaultConnection": "Server=DBServer;Database=DB;User ID=DBUser;Password=DBPassword;"然后发布环境中有一个任务称为 Tokenization,它从发布环境中提取变量集以替换下划线的标记。

我们使用这个插件来执行标记化步骤。 https://marketplace.visualstudio.com/items?itemName=TotalALM.totalalm-tokenization

【讨论】:

抱歉延迟回复 - 我们一直在尝试多种方法。我可以问一下您的 Visual Studio 实例会发生什么吗?您是否还有 XDT 转换/SlowCheetah 配置,以便您能够在 Visual Studio 中针对不同环境进行调试? 是的,我们使用发布转换将令牌插入到我们的主配置中,类似于 【参考方案2】:

除了Ryan Schlueter's answer,还有一个官方的File Transform task 可以完美地完成这项工作,而不是使用第三方标记化任务。该任务不能作为扩展提供;它必须从源代码构建并手动上传到您的 Azure DevOps 服务器。我有一个little trouble(现在已解决),但这些是要运行的命令(来自 VS 命令提示符):

git clone https://github.com/microsoft/azure-pipelines-tasks.git
cd azure-pipelines-tasks
node make.js build test --task FileTransformV1
C:\Users\jason.payne\source\repos\external\azure-pipelines-tasks\_build\Tasks\FileTransformV1
tfx build tasks upload --task-path .\_build\Tasks\FileTransformV1 -u URL/Collection -t PAT

其中URLCollectionPAT必须根据您自己的详细信息填写。

然后,您可以根据任务中的以下帮助文本将此任务与所需变量一起添加到您的发布管道中:

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

此解决方案不再需要包含各种特定于环境的设置的源代码控制转换文件,而是将它们放在发布管道中而不是它们所属的位置。您只需要一个带有空值或默认值的基本 app.config,无需更改其默认构建操作属性。

【讨论】:

以上是关于Azure Devops 中针对不同环境的 app.config 转换的主要内容,如果未能解决你的问题,请参考以下文章

如何将Azure DevOps中的代码发布到Azure App Service中

Azure DevOps 工作项附件上传日期

Azure DevOps 项目管道无法从不同项目中的工件源访问 NuGet 包

如何将Azure DevOps中的代码发布到Azure App Service中

在 C# 应用程序中从 Azure DevOps 获取构建测试结果

DevOps 和 Azure 应用服务中的环境变量