2015-02-18 3 views
5

So fange ich an, mit Nuget und es ist web.config install/uninstall.xdt Werte zu spielen.Löschen xdt-Element, wenn es keine Kinder hat

Meine Frage wäre, gibt es und xdt: Transform, die leere Elemente löschen wird. Ich habe hier nichts gefunden. https://msdn.microsoft.com/en-us/library/dd465326%28v=vs.110%29.aspx

Hier ist mein Beispiel.

Mein aktueller Web.config.install.xdt sieht aus wie dieses

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.web> 
    <compilation xdt:Transform="InsertIfMissing"> 
     <assemblies xdt:Transform="InsertIfMissing"> 
     <add xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" /> 
     </assemblies> 
    </compilation> 
    </system.web> 
</configuration> 

und meine Deinstallation wie folgt aussieht

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.web> 
    <compilation> 
     <assemblies> 
     <add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" /> 
     </assemblies> 
    </compilation> 
    </system.web> 
</configuration> 

Hier ist meine web.config vor (vereinfacht)

<system.web> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 

Hier ist meine web.config nach der install.xtd

<system.web> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     <add assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" /> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 

Hier ist meine web.config nach der Deinstallation

<system.web> 
    <authentication mode="None" /> 
    <compilation debug="true" targetFramework="4.5"> 
     <assemblies> 
     </assemblies> 
    </compilation> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 

Gibt es trotzdem von dem Tag loswerden?

Antwort

5

Es scheint, dass Sie mehrere Transformationen für ein Element angeben können. Daher können Sie den Inhalt aus Ihrer Installation entfernen und dann prüfen, ob das Element untergeordnete Elemente aufweist, oder das Element entfernen.

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <system.web> 
    <compilation> 
     <assemblies> 
     <add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" /> 
     </assemblies> 
     <assemblies xdt:Locator="Condition(count(*) = 0)" xdt:Transform="Remove"/> 
    </compilation> 
    </system.web> 
</configuration> 
+0

wow danke, ich werde versuchen, Ihre Lösung so schnell wie möglich zu testen. Ich muss meinen Code auffrischen, es ist eine Weile her. – Lareau

+0

danke, ich habe es heute Morgen versucht und es hat wie ein Zauber funktioniert. Gute Infos zu wissen. – Lareau

+0

Toller Tipp, danke – resp78

Verwandte Themen