2013-05-01 17 views
30

Ich versuche, meinen TFS-Build die web.config-Transformation zu erstellen, die mit der Konfiguration verknüpft ist, die ich für meinen Build ausgewählt habe. Wenn ich den Build starte, überprüfe ich die Datei web.config. Es wurden keine Transformationen angewendet. Wenn ich eine Veröffentlichung von VS2012 mache, funktioniert die Transformation korrekt.TFS 2012 und web.config transformiert

Ich habe TFS 2012 (Update 2) eingerichtet und einen separaten Server für Builds. Ich habe VS2012 nicht auf dem Build-Server installiert, aber ich habe die Ordner C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web und WebApplications von meinem Dev-Computer auf den Build-Server kopiert.

Ich habe einige Konfigurationen in meinem Projekt erstellt und einige Transforms zum zugehörigen Web hinzugefügt {configname} .config.

Ich habe einen Build erstellt und legen Sie die zu erstellenden Objekte - Konfigurationen auf Build zu einer der Konfigurationen in meinem Projekt. Ich habe festgestellt, dass es nur Debug und Release hat, es hatte keine der Konfigurationen, die ich erstellt habe. (Nebenfrage: Ist das korrekt, oder sollte es alle Konfigurationen zeigen, die ich erstellt habe?)

Also ich einen Build ausführen und überprüfen Sie den Ausgabeordner und die web.config hat die Transformationen nicht angewendet. Gibt es noch etwas, was ich tun muss?

Antwort

2

Sie können den Namen der Konfiguration in die Liste "Zu erstellende Objekte-> Zu erstellende Konfigurationen" eingeben.

Wenn das nicht hilft, versuchen Sie folgende MSBuild Argument hinzuzufügen:/p: TransformConfigFiles = true (3. Erweitert -> MSBuild Argumente)

37

Gerade werfen/p: TransformConfigFiles true = dort wird nicht eigentlich alles tun.

Sie müssen auch dieses Ziel in der Projektdatei hinzuzufügen:

<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'"> 
    <ItemGroup> 
     <DeleteAfterBuild Include="$(WebProjectOutputDir)\Web.*.config" /> 
    </ItemGroup> 
    <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)\Web.config" /> 
    <Delete Files="@(DeleteAfterBuild)" /> 
</Target> 

Diese meine Quelle ist: http://blog.degree.no/2012/03/automatic-config-transformations/

+0

Works arbeitet für mich! Und Kudos, Ihr Codebeispiel hier behebt sogar den Tippfehler aus diesem Blogpost (der an zwei Stellen ausgeht). – Abacus

+1

Nachdem ich diese Zeilen während des Builds zur csproj-Datei hinzugefügt habe, ist ein Fehler aufgetreten: 'Die Task' TransformXml 'wurde nicht gefunden.' Wenn jemand das gleiche hat, können Sie dies vor diesem Ziel hinzufügen Vitalii

+0

toll, das hat bei mir funktioniert (VS2015, TFS2015)! Vielen Dank! Es ist jedoch sehr merkwürdig, dass das Spezifizieren der Build-Konfiguration nicht ausreicht .... MS macht manchmal merkwürdige Implementierungen ... – Vladislav

1

Rechts Ihre Lösung Datei klicken, gehen Sie auf Eigenschaften, Konfigurationseigenschaften, und klicken Sie auf Konfiguration Manager auf der Oberseite. Stellen Sie sicher, dass Ihre Konfiguration für verschiedene Umgebungen ordnungsgemäß festgelegt ist. Wenn es nicht richtig eingestellt ist, stellen Sie es richtig ein und checken Sie den Code ein. Gehen Sie nun zu Ihrer Build-Vorlage und überprüfen Sie die Konfiguration, um Eigenschaften in der Prozess-Registerkarte zu erstellen. Sie müssen in der Lage sein, Ihre verschiedenen Konfigurationen zu sehen. Wenn die Konfiguration bereits ordnungsgemäß festgelegt wurde, können Sie den neuen Konfigurationsnamen auch hinzufügen, indem Sie ihn in der Eigenschaft build eingeben.

Hinweis: Sie können auch mit der rechten Maustaste auf Ihre Transformationsdatei web.config klicken und Vorschautransformation auswählen und sicherstellen, dass die Transformationskonfiguration ordnungsgemäß funktioniert.

Sie auch das Veröffentlichungsprofil Namen geben kann, wenn es richtig int er Argumente msbuild Abschnitt

/p:DebugSymbols=false;DebugType=None;DeployOnBuild=true;PublishProfile=Stage