即使我从未指定"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",但效果似乎是一样的。

正如我所说的,所有其余的转换都按预期工作,它只是那一行,由于某种原因被删除而不是转换。

因此,如果有人有任何线索,请随时启发我,因为目前我必须检查配置文件并插入行,如果它缺失,但我担心将来可能会有其他行缺失。

即使我从未指定"Remove"作为行动

这个问题似乎是由web中的默认值引起的。Config为空行。一旦我用一个虚拟值替换了默认值,它就会像预期的那样工作。

我不明白为什么这是不同行为的事实,但显然是这样。因此,解决这个问题的方法是永远不要在web中设置默认值。配置,将为不同的构建定义转换为空字符串,始终设置一个虚拟值代替。