Web.Config 转换 - 命名空间部分未转换

Web.Config transformation - section with namespace not being transformed

我在 ASP.Net WCF .Net Framework 4.0 上有一个 web.config,并且我根据构建环境进行了转换。

问题是我的 system.serviceModel 部分中有一个诊断部分。在基础 web.config 这是空的:

<diagnostics></diagnostics>

然后在我的转换中,我们应用包含名称空间的过滤器,如下所示:

<diagnostics performanceCounters="All" xdt:Transform="Replace">
   <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" maxMessagesToLog="300000" maxSizeOfMessageToLog="200000000">
     <filters>
       <add xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>
     </filters>
   </messageLogging>
 </diagnostics>

应用转换时 (xdt:Transform="Replace"),我得到:

<diagnostics performanceCounters="All">
 <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
 maxMessagesToLog="300000" maxSizeOfMessageToLog="200000000">
 <filters>
 <add>/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>
 </filters>
 </messageLogging>
 </diagnostics>

这导致 web.config 出现 Xml 错误,无法正常工作。

所以目标是在转换之后,名称空间声明将出现在每个“添加”元素上。我试过在配置级别声明命名空间但没有成功...

正在恢复,这是过滤器的当前输出:

<add>/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>

我们希望它是这样的:

<add xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">/s:Envelope/s:Header/a:Action[contains(.,'IMyService')]</add>

我该如何克服这个问题?

我找不到合适的解决方案,甚至之前声明的命名空间也不起作用...

我们最终没有转换,而是每个环境的整个 web.config,然后在发布时选择合适的并假定为正确的。