34

Ich möchte, dass web.config-Transformationen lokal ausgeführt werden, die Transformationen jedoch anscheinend nur bei Implementierungen auftreten.Lassen Sie Web.config-Transformationen lokal arbeiten

Kennt jemand eine Möglichkeit, das Msbuild-Ziel "TransformWebConfig" auszuführen, ohne dass es den "Rebuild" -Prozess durchläuft und auch ein Verzeichnis angibt und ausgibt, wo die transformierte Datei web.config ausgegeben wird?

EDIT: Mit Sayed Antwort, habe ich eine .bat Datei, um die Aufgabe zu tun für mich laufen:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config" 

die "Transformation.proj" ist unten in der Antwort-Code-Snippet ist eine Kopie von Sayed. Geben Sie nur die Quelle, das Ziel und das Ziel für die Umwandlung an. Die neue Datei, in diesem Fall die transformierte "web.config", befindet sich im Verzeichnis "D: \ Demo". Ich kopiere es einfach, um die web.config meines Projekts zu überschreiben und schließlich die erzeugte Datei im "demo" -Ordner zu löschen.

Auch habe ich ein Makro diese Batch-Datei auszuführen und die tranformation für mich durchführen:

Public Module DoTransform 
    Sub RunTransformBatchFile() 
     Try 
      Process.Start("D:\Demo\RunTransform.bat") 
     Catch ex As System.Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 
End Module 

Sie können auch eine Schaltfläche auf der Symbolleiste hinzufügen, um diese Stapelverarbeitung auszuführen und/oder eine Tastenkombination zuweisen ausführen.

Antwort

34

Wenn Sie eine Konfigurationsdatei ohne Verwendung der Web Publishing-Pipeline transformieren möchten, verwenden Sie einfach die TransformXml-Aufgabe manuell. Ich habe einen ausführlichen Blog-Post auf diese bei http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx geschrieben, aber hier sind die hohen Lichter:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask TaskName="TransformXml" 
      AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 

    <Target Name="Demo"> 
     <TransformXml Source="app.config" 
         Transform="Transform.xml" 
         Destination="app.prod.config"/> 
    </Target> 
</Project> 

Hier habe ich die app.config-Datei mit transform.xml Datei manuell zu transformieren und die Zieldatei ist app.prod. Konfig.

Eine Sache, die Sie erwähnt haben, war, dass Sie die Umwandlung lokal ausführen können, wenn Sie die App ausführen. Der Grund, warum wir die Transformation nur auf Paket/Veröffentlichung durchführen, liegt darin, dass, wenn wir web.config selbst umgewandelt haben, das web.config beim nächsten Debuggen der App erneut transformiert wird. Wenn zum Beispiel in der Datei web.debug.config die Umwandlung vorhanden ist, um der Konfiguration einen Wert hinzuzufügen, ist alles in Ordnung, wenn Sie das erste Mal hinzufügen, aber dann, wenn Sie das Programm das nächste Mal ausführen/debuggen, wird es wieder hinzugefügt. Also ist es das Beste, das zu vermeiden.

+0

Das ist genau das, was ich brauchte, verwandeln die web.config ohne Gebäude. Vielen Dank Sayed! –

+0

Sayed, würden Sie zufällig diese Antwort auf diese andere Frage wissen? http://stackoverflow.com/questions/2915329/advanced-tasks-using-web-config-transformation –

+0

Ja, ich weiß zufällig, dass ich es gerade beantwortet habe. –

2

Wenn Sie Visual Studio 2015 verwenden, können Sie einfach mit der rechten Maustaste auf die Transformation der gewünschten Umgebung klicken und auf "Vorschau anzeigen" ... Es wird dann die Transformation generieren, und Sie können kopieren und in die einfügen normale Web.config-Datei für Debugging-Zwecke. Gib es einfach nicht!

Wenn Sie Visual Studio 2013 verwenden, können Sie die SlowCheetah installieren - XML ​​Wandelt Erweiterung

Verwandte Themen