2012-09-14 8 views
5

Ich benutze SlowCheetah, um meine app.configs zu transformieren. Ich habe eine Multi-Projekt-Lösung, bei der eines der Projekte ein Post-Build-Ereignis ausführt, bei dem die Ausgabe der Bin an anderer Stelle kopiert wird. Ich habe festgestellt, dass SlowCheetah seine Transformationen nach dem Post-Build-Ereignis durchführt, also ist die app.config, die ich kopiere, die vor-transformierte Version.SlowCheetah wird nach Post-Build-Ereignissen ausgeführt

Hat jemand einen Vorschlag, wie ich meine Kopie nach der Transformation von SlowCheetah ausführen kann? Wird dazu eine benutzerdefinierte Build-Aufgabe geschrieben?

+0

Ich habe einen Workaround gefunden. Es ist nicht elegant, aber es funktioniert. Ich habe ein Dummy-Projekt erstellt und festgelegt, dass die Abhängigkeit nach dem Projekt, das ich nach dem Build erstellt habe, erstellt wurde. Ich habe das Post-Build-Copy-Event vom ursprünglichen Projekt in dieses neue Dummy-Projekt verschoben. Das funktioniert, weil SlowCheetah seine Arbeit getan hat. – ScottC

Antwort

4

Wenn Sie msbuild 4.0 zum Erstellen Ihrer Projekte verwenden, können Sie mit neuen AfterTargets BeforeTargets-Attributen auf slowcheetchah-Ziele zugreifen.

Ich weiß nicht, was genau Namen, den Sie nach einzuhaken möchten Ziel aber dieser Code gab man konnte Basiskonzept, wie diese

tun
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="Some_Target_Name" AfterTargets="TransformAllFiles" > 
      <Message Text="= Script here will run after SlowCheetah TransformAllFiles ="/> 
    </Target> 
<Project> 

Editiert: Ich installierte SlowCheetah und festgestellt, dass AfterTargets Attribut sollte „TransformAllFiles“ sein . einfach richten Sie Ihre Ziel Abhängigkeit AfterTargets="TransformAllFiles"

2

Alexey Antwort auf die richtige Lösung führt aber hier ist es in voller Länge:

  • Rechtsklick auf das Projekt und wählen Sie Unload Project
  • nun das Projekt der rechten Maustaste und wählen Edit [your project name].csproj
  • Scroll nach unten und Kommentar- das Ziel genannt AfterBuild und fügen Sie dieses Attribut AfterTargets="TransformAllFiles"
  • Bewegen Sie Ihren Beitrag bauen Aktionen in diesem Ziel den Exec Befehl:

Ein Beispiel:

<Target Name="AfterBuild" AfterTargets="TransformAllFiles"> 
<Exec Command="ECHO Hello PostBuild World!" /> 
</Target> 
0

ich in dieses Problem zu gestoßen haben ... auf die neueste Version von SlowCheetah zu aktualisieren entschieden (Strom 2.5.8), und dieses Problem scheint behoben worden zu sein! Keine weiteren Probleme bei der Verwendung von Post-Build-Ereignissen zum Bereitstellen eines Projekts mit transformiertem XML!

Nach dem NuGet-Paket Upgrade-Prozess hatte ich ein seltsames Problem, obwohl ... Transformationen waren nicht mehr passiert. Durch die Bearbeitung des Projekts, wie es Naeem Sarfraz vorgeschlagen hat, habe ich festgestellt, dass der Abschnitt PropertyGroup von SlowCheetah am Ende von .csproj platziert wurde.

Es war nur eine Frage des Verschiebens nach oben, in der Nähe der anderen PropertyGroup-Abschnitte, und jetzt funktioniert es wie ein Zauber!

0

Wenn Sie kopieren/verschieben andere CONFIG-Dateien (außer web.config) um nach dem Build vor hier zu veröffentlichen ist, wie es mit Visual Studio 2013 durchgeführt werden kann (teste ich nicht auf früheren Versionen) . Dieser Abschnitt kann am Ende der .csproj-Datei direkt vor dem schließenden Tag </Project > hinzugefügt werden und wird ausgelöst, kurz bevor MSDeploy den Veröffentlichungsprozess startet.

<Target Name="MoveConfigFile" BeforeTargets="MSDeployPublish"> 
    <Move 
     SourceFiles="$(IntermediateOutputPath)Package\PackageTmp\ThirdPartyApp.config" 
     DestinationFolder="$(IntermediateOutputPath)Package\PackageTmp\bin" 
     OverwriteReadOnlyFiles="true" 
    /> 
</Target> 

Die Firma für die ich gekauft ein Drittes Produkt arbeiten, die eine CONFIG-Dateien im Binärordner zusammen mit seiner Montage zu arbeiten, um zu haben brauchen.

Zur gleichen Zeit müssen wir das Produkt der CONFIG-Datei verarbeiten und in der Lage sein, es nach Transformationen auf die bin Ordner zu verschieben.

Der Ordner $ (IntermediateOutputPath) Package \ PackageTmp enthält die gesamte Anwendung, die über den Zielserver kopiert wird.

Verwandte Themen