15

Zur Zeit habe ich einen Post-Build-Ereignis in meinem Web-Projekt konfiguriert Visual Studio 2012 wie folgt aus:Wie führe ich ein PowerShell-Skript nur vor einem Web-Deploy-Task in VS 2012 aus?

enter image description here

Diese im Grunde eine PowerShell script ruft ein Copyright-Vermerk auf jeder CS-Datei hinzuzufügen.

Was Ich mag würde zu tun ist, um diesen Powershell-Skript nur auszuführen, bevor Veröffentlichen des Web-App auf den Remote-Server. Dadurch werde ich nicht jedes Mal eine Verzögerung erfahren, wenn ich das Projekt debuggen muss. Weißt du irgendeinen Weg dies zu erreichen?


Nach Sayed's answer, besonders angefertigt ich ein bestimmtes Veröffentlichungsprofil und hat dieses Bild:

<PipelineDependsOn> 
    CustomBeforePublish; 
    $(PipelineDependsOn); 
</PipelineDependsOn> 
</PropertyGroup> 
<Target Name="CustomBeforePublish"> 
<Message Text="******* CustomBeforePublish *******" Importance="high" /> 
<Exec Command="powershell.exe -file &quot;$(ProjectDir)\Copyright.ps1&quot;" /> 
</Target> 
+0

Sorry, aber haben Sie eine neue PropertyGroup hinzugefügt, zusätzlich zu der bereits existierenden in der pubxml? – nokturnal

Antwort

15

Es hängt wie du vor, aber unten definierst, ist eine Technik.

Wenn Sie ein Veröffentlichungsprofil mit VS2012 erstellen, erstellt es eine .pubxml-Datei im Ordner Properties \ PublishProfiles (Mein Projekt \ PublishProfiles für VB). Dies sind MSBuild-Dateien, die Sie bearbeiten können, um den Veröffentlichungsprozess anzupassen. In Ihrem Fall können Sie ein Ziel in den Veröffentlichungsprozess einfügen, bevor die Veröffentlichung tatsächlich stattfindet. Sie können dies tun, indem Sie die PipelineDependsOn-Eigenschaft wie folgt erweitern.

<PropertyGroup> 
    <PipelineDependsOn> 
    CustomBeforePublish; 
    $(PipelineDependsOn); 
    </PipelineDependsOn> 
</PropertyGroup> 

<Target Name="CustomBeforePublish"> 
    <Message Text="********************************** CustomBeforePublish ***********************************" Importance="high"/> 
</Target> 

FYI die Anpassung von .wpp.targets in Bezug auf, das war die einzige Technik, die wir für VS2010 hatte. Meine Empfehlung hier ist wie folgt; Passen Sie die .pubxml-Datei für die meisten Fälle an und erstellen Sie nur eine .wpp.targets-Datei, wenn Sie jede Veröffentlichung des angegebenen Projekts anpassen möchten.

+0

Super Sayed! Hat super funktioniert. Danke für die Erklärung ... –

+6

Was, wenn ich etwas nach * (nicht vorher) veröffentlichen möchte? – deerchao

+0

Hallo Sayed, ich versuche dies in vs2015 und ich bekomme einen Fehler, wenn ich wählen Sie veröffentlichen. Fehler: "Das Attribut Name in Element ist nicht erkannt". Irgendwelche Ideen? – webber

4

Deklarieren Sie die folgenden ProjectName.wpp.targets-Datei im Stammverzeichnis Ihrer Web-Anwendung:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BeforeAddContentPathToSourceManifest> 
     $(BeforeAddContentPathToSourceManifest); 
     AddCopyright; 
    </BeforeAddContentPathToSourceManifest> 
    </PropertyGroup> 

    <Target Name="AddCopyright"> 
    <!-- I recommend passing in $(_MSDeployDirPath_FullPath) to your script 
     as the base path to search to avoid having to perform a VCS rollback 
     (files are copied there before the deployment) 
    --> 
    <Exec Command="powershell.exe -file &quot;$(SolutionDir)Copyright.ps1&quot; &quot;$(_MSDeployDirPath_FullPath)&quot;" /> 
    </Target> 
</Project> 
+0

Vielen Dank für die Antwort Richard. Wie Sie in Sayeds Antwort sehen können, gibt es eine Möglichkeit, ein bestimmtes Veröffentlichungsprofil anzupassen, und das war in meinem Fall besser geeignet. –

+0

Siehe meine Antwort unten über die Verwendung von .wpp.targets mit VS2012 –

+0

@SayedIbrahimHashimi - Danke für die Köpfe hoch. Sie sollten erwägen, die Dokumente zu aktualisieren, da sie als gleichwertig dokumentiert sind (soweit es die Relevanz betrifft). –

Verwandte Themen