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

时间:2018-11-20 15:37:03

标签: c# azure-devops azure-pipelines azure-pipelines-build-task

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

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

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

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

我想念什么?

2 个答案:

答案 0 :(得分:2)

我们假设在较新的Azure Devops中,我们对VSTS所做的工作与之类似。我们将转换添加令牌到配置文件IE“ DefaultConnection”中:“ Server = DBServer ;数据库= DB;用户ID = DBUser ;密码= DBPassword < / strong>;”然后,在发布环境中有一个名为Tokenization的任务,该任务从发布环境中提取设置的变量以替换下划线的令牌。

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

答案 1 :(得分:1)

Ryan Schlueter's answer之前,没有使用第三方Tokenization任务,而是有一个官方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}

必须根据您自己的详细信息填写{URL}{Collection}{PAT}

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

  

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

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