Azure DevOps 发布管道中的文件转换任务不替换变量

问题描述 投票:0回答:1

在我的项目中,有一个 Webservice.settings 包含 3 个变量。 (Structure of Webservice.settings) 我打算使用我的 release-pipeline (Azure DevOps) 设置这些变量。因此,我在 DevOps 中创建了一个变量组,其中包含我想要设置的变量和值。 (Structure of variable-group) 变量组链接到管道,其范围设置为“release”。

为了设置变量,发布管道包含一个file-transform-task。 (Structure of file-transform-task

管道运行后,.exe.config如下所示:

  <applicationSettings>
    <MyFancyProgram.App.Properties.Webservice>
      <setting name="UrlEndpoint" serializeAs="String">
        </value>
      </setting>
      <setting name="LoginName" serializeAs="String">
        </value>
      </setting>
      <setting name="LoginPasswort" serializeAs="String">
        </value>
      </setting>
    </MyFancyProgram.App.Properties.Webservice>
  </applicationSettings>

变量尚未设置。

我的期望是,.exe.config应该看起来像这样:

  <applicationSettings>
    <MyFancyProgram.App.Properties.Webservice>
      <setting name="UrlEndpoint" serializeAs="String">
        <value>NoUrlEndpointNameSet</value>
      </setting>
      <setting name="LoginName" serializeAs="String">
        <value>NoLoginNameSet</value>
      </setting>
      <setting name="LoginPasswort" serializeAs="String">
        <value>NoLoginPasswortSet</value>
      </setting>
    </MyFancyProgram.App.Properties.Webservice>
  </applicationSettings>

我尝试过的:我假设我错误地解决了变量组内的命名空间。所以在变量组内,我尝试了不同的选项,例如:

  • MyFancyProgram.App.Properties.Webservice.LoginName
  • 属性.Webservice.LoginName
  • 等等。 我检查了 MS 文档,但找不到任何与我的情况匹配的内容。

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/file-transform-v1?view=azure-pipelines https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/file-transform-v2?view=azure-pipelines

xml azure-devops azure-pipelines-release-pipeline variable-substitution
1个回答
0
投票

经过一番尝试和错误,咖啡和轻微的头痛,我发现了问题并解决了它。

我在 Webservice.settings 中添加了一些默认值 (Added values via designer)

这导致我的 .exe.config 中的结构略有不同:

<MyFancyProgram.App.Properties.Webservice>
  <setting name="UrlEndpoint" serializeAs="String">
    <value>someValue</value>
  </setting>
  <setting name="LoginName" serializeAs="String">
    <value>defaultPlaceholderLoginName</value>
  </setting>
  <setting name="LoginPasswort" serializeAs="String">
    <value>defaultPlaceholderLoginPasswort</value>
  </setting>
</MyFancyProgram.App.Properties.Webservice>

这里重要的部分是,对于每个变量值现在都有一个开始和结束标签。

<value>someValue</value>

之前只有“二合一”标签。

<value/>

看起来文件转换任务仅在开始和结束值标签内执行其变量替换,而不是在“二合一”值标签内。

附录:作为默认值的空格不足以用开始和结束值标签对替换“二合一”值标签。

© www.soinside.com 2019 - 2024. All rights reserved.