发布期间的Azure DevOps XML转换不起作用

Sah*_*Lee 3 c# xml azure-devops

我想配置我们的管道,以允许一个构建用于多个环境,而不必创建单独的构建。根据文档,它似乎是有可能的,因为它说:

  • 您可以使用此技术来创建默认程序包并将其部署到多个阶段。

我将舞台命名为我的环境(预览),并为该环境创建了一个web.config文件(web.preview.config)。我所有的环境配置文件都与Web.Config文件位于同一路径。

日志显示转换已完成:

2018-11-17T00:26:52.0383966Z [command] D:\ a_tasks \ AzureRmWebAppAppDeployment_497d490f-eea7-4f2b-ab94-48d9c1acdcb1 \ 3.4.13 \ ctt \ ctt.exe s:D:\ a_temp \ temp_web_package_06958915987488234 \ Content a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp.Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.config t:D:\ a_temp \ temp_web_package_06958915987488234 \ Content \ D_C \ a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp.Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.Release.config d:D:\ a_temp \ temp_web_package_06958915987488234 \ Content \ D_C \ a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp.Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.config pw i 2018-11-17T00:26:52.4335280Z [command] D:\ a_tasks \ AzureRmWebAppAppDeployment_497d490f-eea7 -4f2b-ab94-48d9c1acdcb1 \ 3.4.13 \ ctt \ ctt.exe s:D:\ a_temp \ temp_web_package_06958915987488234 \ Content \ D_C \ a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp。Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.config t:D:\ a_temp \ temp_web_package_06958915987488234 \ Content \ D_C \ a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp.Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.Preview.config d:D:\ a_temp \ temp_web_package_06958915987488234 \ Content \ D_C \ a \ 1 \ s \ Microsoft.Xbox.Mvp \ Microsoft.Xbox.Mvp.Api \ obj \ Preview \ Package \ PackageTmp \ bin \ Web.config pw i 2018-11-17T00:26:52.5443873Z XML转换成功应用

我可以看到它首先转换为发行版,然后按照文档中的说明应用了预览(发行版然后是环境)。但是,尽管上面说XML转换成功应用,但是当我检查配置变量时,它们并没有改变。我可以进行转换的唯一方法是在排队新的构建时定义buildConfiguration变量,这使我无法在不同的环境中使用同一构建。

在研究时,我从以下链接中找到了这个:

Web.config是在构建过程中转换的,如果从“构建”生成部署包,然后在“发行”中部署它,则无法在部署之前对其进行转换。

但是医生说我可以在多个阶段使用一个默认软件包...是否仍然意味着我必须为每个环境创建单独的版本?XML转换不是我要解决的方案应该看的东西吗?

先感谢您!

++编辑:

发布设置: ReleaseSettings

发布步骤(我想?我强烈感觉这就是您想要的...): ReleaseSteps

Ken*_*n H 7

1)确保您完成了作品转换。在这里测试

2)确保在VS项目中包含转换文件Web.Preview.config,并复制到输出目录。

3)在构建期间禁用配置转换,您只需要在Build任务的MSBuild Arguments部分中添加参数/ p:TransformWebConfigEnabled = False即可。如果要在发行期间更新连接字符串,还需要添加/ p:AutoParameterizationWebConfigConnectionStrings = False。这将使用Web.Preview.config来“转换” web.config。

4)在文件转换和变量替换选项下的IIS Web App Deploy任务版本中,仔细检查是否已检查XML转换。

  • 删除项目文件中转换文件上的“DependentUpon”也可能有帮助 (2认同)

Dan*_*Boy 5

我在互联网上找到的答案都不适用于我的构建和发布管道。我web.config从发布管道中获得的始终指向未转换的值。

经过几个小时的拉扯我的头发后,我终于让它发挥作用了。

有关我的设置的一些简短信息

我希望能够通过一个构建和一个发布管道在所有环境上进行部署。

我的设置:

  • 一个构建管道,用于构建我们所有的标准分支(testreleasemaster)。
  • 一个发布管道,根据启动发布的分支具有不同的阶段。

在此输入图像描述 我们的测试阶段在我们的测试服务器上发布了测试分支。阶段/生产来自相同的发行分支,但有自己的转换文件。

解决方案

我遵循了Microsoft 的一些指南,并设置了web.<environment_name>.config与发布阶段名称相匹配的名称。

我不需要为每个转换删除<Dependent Upon>.csproj。相反,我所做的只是将每个转换的“构建操作”属性设置为“内容”,如下图所示。

Azure DevOps 发布管道图

然后,我将这些命令添加到构建管道的“构建解决方案”->“MSBuild 参数”:

  • /p:MarkWebConfigAssistFilesAsExclude=false
  • /p:TransformWebConfigEnabled=false
  • /p:AutoParameterizationWebConfigConnectionStrings=False

.config现在,构建不会尝试自行转换,也不会从工件中排除转换文件,而是允许发布管道进行转换。此外,保留<Dependent On>转换文件可以让我们在代码编辑器中拥有“更清晰”的外观。