对我来说更好的方法是仅在元素不存在时才插入元素,因为我只设置某些属性。删除元素将丢弃主元素的任何其他属性(如果它们存在)。
示例:web.config(无元素)
<serviceBehaviors>
<behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
web.config(带元素)
<serviceBehaviors>
<behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
<serviceDebug httpsHelpPageEnabled="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
将 Locator 与 XPath 表达式一起使用,如果节点不存在,则添加节点,然后设置我的属性:
<serviceDebug xdt:Transform="Insert"
xdt:Locator="XPath(/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior[not(serviceDebug)])" />
<serviceDebug includeExceptionDetailInFaults="true" xdt:Transform="SetAttributes" />
两个生成的 web.config 文件都具有 includeExceptionDetailInFaults="true" 并且第二个保留了 httpsHelpPageEnabled 属性,而 remove/insert 方法则不会。