如何进行可选转换?

时间:2018-10-23 12:30:58

标签: c# .net web-config web-config-transform

我有一个配置转换,除其他操作外,在smtpClient中插入MyAppSettings节点:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <MyAppSettings>
    <smtpClient xdt:Transform="Insert">
      <!-- other tags -->
    </smtpClient>
  </MyAppSettings>
</configuration>

我的问题是,它将应用于来自不同项目的许多Web.config文件。其中一些具有MyAppSettings节点:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- other sections -->

  <MyAppSettings/>
</configuration>

有些则没有:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- other sections -->
</configuration>

在第二组的任何配置上运行转换时,我得到:

  

Transformation.xml(4,6):错误:源文档中没有元素与'/ configuration / MyAppSettings / smtpClint'匹配

我尝试用Condition修复该错误:

<smtpClient
  xdt:Locator="Condition(/configuration/MyAppSettings)"
  xdt:Transform="InsertAfter(/configuration/MyAppSettings)">
</smtpClient>

但是它给了我同样的错误(我认为InsertAfter不会插入正确的位置)。

如何使“插入”规则为可选?我的意思是,如果没有“ / configuration / MyAppSettings”节点,则跳过此规则并应用其他转换。

0 个答案:

没有答案