azure-pipelines - Azure Pipelines 没有用非空值替换 XML 空值
问题描述
我在 Azure 中设置了一个管道,它在运行时使用变量替换 XML 配置文件中的值。我将应用程序中的一个错误追溯到没有正确值的配置文件,我可以从管道日志中看到预期值没有被替换。
我最初认为这是因为我使用了自闭合标签,但是用完整标签替换它们并不能解决问题,用空白值替换它们并不能解决问题。
在其他方面,管道运行良好。我的测试表明它将用空值或非空值替换非空值。但我不能让它用任何东西替换和清空值。所以我认为这并不明显,例如它没有完全跳过替换,它可以匹配变量,变量在applicationSettings
部分中,等等。搜索似乎只显示几年前的东西,并且通常替换非空值有一个空值,这与我正在尝试的相反。
我可以在默认配置文件中放入虚拟值并根据需要用空/非空值替换它们,但这将涉及向管道添加一堆变量,只是在大多数情况下用空值替换它们。这也意味着我需要记住在配置文件中添加任何具有虚拟值的新条目并相应地更新管道。
有没有其他人遇到过这个问题?如果是这样,您是否解决了它以及如何解决?
我的配置文件示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<applicationSettings>
<App.Namespace>
<setting name="Test1" serializeAs="String">
<value />
</setting>
<setting name="Test2" serializeAs="String">
<value></value>
</setting>
<setting name="Test3" serializeAs="String">
<value> </value>
</setting>
<setting name="Test4" serializeAs="String">
<value>dummy</value>
</setting>
</App.Namespace>
</applicationSettings>
...
</configuration>
管道变量
Test1 -> Value1
Test2 -> Value2
Test3 -> Value3
Test4 -> Value4
输出配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<applicationSettings>
<App.Namespace>
<setting name="Test1" serializeAs="String">
<value /> <!-- Expected Value1 -->
</setting>
<setting name="Test2" serializeAs="String">
<value></value> <!-- Expected Value2 -->
</setting>
<setting name="Test3" serializeAs="String">
<value> </value> <!-- Expected Value3 -->
</setting>
<setting name="Test4" serializeAs="String">
<value>Value4</value> <!-- Correct -->
</setting>
</App.Namespace>
</applicationSettings>
...
</configuration>
解决方案
您可以使用Replace Tokens扩展。使用此扩展,您可以将令牌替换为空值或非空值。例如,将值设置为#{var}#
,如果要使用空字符串,请将变量设置var
为(empty)
:
<setting name="Test" serializeAs="String">
<value>#{var}#</value>
</setting>
如果您不想记住变量/虚拟名称,您可以尝试使用这种情况下提到的转换文件。例如:
<applicationSettings xdt:Transform="Replace">
<App.Namespace>
<setting name="Test1" serializeAs="String">
<value>value1</value>
</setting>
<setting name="Test2" serializeAs="String">
<value>value2</value>
</setting>
<setting name="Test3" serializeAs="String">
<value>value3</value>
</setting>
<setting name="Test4" serializeAs="String">
<value>value4</value>
</setting>
</App.Namespace>
</applicationSettings>
但我认为这个解决方案并不比使用 Replace Tokens 扩展方便。
推荐阅读
- reactjs - 当 React App 尝试通过 SignalR 连接到启用了 Windows 身份验证的 .NET CORE Web App 时出现 CORS 错误
- python - 如何在pyqt中使QRadioButton圆圈变粗?
- sql - 带有时间戳的两行之间的SQL差异
- python - 如何使用 boto3 和 Docker 部署 AWS-Lambda?
- windows - 如何判断我的 Windows 机器上是否有 git
- snowflake-cloud-data-platform - 具有随机值的所有列的雪花更新值
- firebase - 如何将用户名从firestore添加到我的appbar中?
- python - 如何在python中编写条件以仅删除具有2个或更多重复项的重复项
- c# - 需要帮助使用 PayPal REST API 或 C# 中的任何其他方法获取 PayPal 交易
- python - 无法测试简单的 sqlalchemy 模型数据类:“映射器映射类无法为映射表组装任何主键列”