即使我从未指定"Remove"作为行动
本文关键字:quot Remove 未指定 | 更新日期: 2023-09-27 17:51:16
我在其中一个web服务中的xslt转换有一个非常奇怪的行为。
我们在网上有以下部分。配置文件(以及其他内容)
<AppSettings>
<add key="TemporaryUpload.Folder" value="TempUpload'"/>
<add key="MailClient.SmtpHost" value="" />
<add key="MailClient.MailEnabled" value="false"/>
</AppSettings>
我们有一个web.production.config转换文件,它被触发(可以在转换后的web上看到)。配置其他部分)。然而,我们有一个问题,其中一行在AppSettings部分,而不是被替换被删除。
转换部分如下所示
<AppSettings>
<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes" key="MailClient.MailEnabled" value="true" />
<add xdt:Locator="Match(key)" xdt:Transform="SetAttributes" key="MailClient.SmtpHost" value="mailhost.test.se"/>
</AppSettings>
第一行被相应地替换,但第二行似乎以某种方式删除了元素而不是替换它。换句话说,转换后的网络中的部分。配置如下
<AppSettings>
<add key="TemporaryUpload.Folder" value="TempUpload'"/>
<add key="MailClient.MailEnabled" value="true"/>
</AppSettings>
我试过使用xdt:Transform="Replace"而不是"SetAttributes",但效果似乎是一样的。
正如我所说的,所有其余的转换都按预期工作,它只是那一行,由于某种原因被删除而不是转换。
因此,如果有人有任何线索,请随时启发我,因为目前我必须检查配置文件并插入行,如果它缺失,但我担心将来可能会有其他行缺失。
这个问题似乎是由web中的默认值引起的。Config为空行。一旦我用一个虚拟值替换了默认值,它就会像预期的那样工作。
我不明白为什么这是不同行为的事实,但显然是这样。因此,解决这个问题的方法是永远不要在web中设置默认值。配置,将为不同的构建定义转换为空字符串,始终设置一个虚拟值代替。