2012-10-09 5 views
6

Ich habe ein C# -Projekt, das auf viele WCF-Services verweist. Für lokale Tests möchte ich den Inhalt der Identitäts-Tags ersetzen, so dass alles, was auf localhost läuft, akzeptiert wird.Mehrere Elemente mit Web.Config-Transformationen einfügen

Die folgende Umwandlung funktioniert, aber fügt nur das DNS-Element an der ersten übereinstimmenden Position ein. Also, wenn ich 5 Endpunkte referenziert hätte, hätte man das DNS-Tag, und die anderen hätten alle leere Identitätselemente.

<system.serviceModel> 
    <client> 
     <endpoint> 
     <identity> 
      <dns xdt:Transform="Insert" value="localhost"/> 
      <userPrincipalName xdt:Transform="RemoveAll" value="someIdentity" /> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 

Wie ändere ich alle übereinstimmenden Elemente, nicht nur die ersten?

+0

versuchen Sie, alle '' Elemente zu entfernen? –

+0

Ja, und dieser Teil funktioniert gut. Allerdings möchte ich auch diese -Elemente durch ersetzen, und ich habe es versäumt, dies zu tun. Ich habe daran gearbeitet, indem ich alle Endpunkte manuell aufgelistet habe, aber wenn es eine elegantere Lösung gibt, würde ich es gerne hören. – Zugbo

Antwort

2

Verwenden Sie das Attribut xdt:Locator, um einen XPath-Ausdruck zu definieren, der allen Elementen <identity> entspricht, die Sie einfügen möchten.

<system.serviceModel> 
    <client> 
     <endpoint> 
     <identity xdt:Locator="XPath(//identity)"> 
      <dns xdt:Transform="Insert" value="localhost"/> 
      <userPrincipalName xdt:Transform="RemoveAll"/> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 
+1

Dies scheint immer noch nur die erste Übereinstimmung zu aktualisieren –

+0

Das Durchsuchen des Quellcodes unter http://xdt.codeplex.com/SourceControl/latest#XmlTransform/XmlTransforms.cs führt mich zu dem Schluss, dass dies derzeit nicht unterstützt wird –