15

Attualmente ho un evento di post-generazione configurato nel mio progetto web utilizzando Visual Studio 2012 in questo modo:Come eseguire uno script PowerShell solo prima di una distribuzione Web Attività Pubblica in VS 2012?

enter image description here

Ciò richiede fondamentalmente un PowerShell script per aggiungere una nota di copyright per ogni file con estensione cs.

Quello che mi piacerebbe fare è quello di eseguire questo script PowerShell solo prima Pubblicazione del web app al server remoto. In questo modo non sperimenterò un ritardo ogni volta che ho bisogno di eseguire il debug del progetto. Conosci qualche modo per realizzare questo?


Secondo Sayed's answer, ho personalizzato un preciso profilo di pubblicazione e ha aggiunto questo:

<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

Siamo spiacenti, ma lo si aggiunge un nuovo PropertyGroup in aggiunta a quella già esistente nel pubxml? – nokturnal

risposta

15

Dipende su come si definisce prima ma sotto c'è una tecnica.

Quando si crea un profilo di pubblicazione con VS2012, verrà creato un file .pubxml nella cartella Proprietà \ PublishProfiles (My Project \ PublishProfiles per VB). Questi sono file MSBuild e puoi modificarli per personalizzare il processo di pubblicazione. Nel tuo caso puoi iniettare un target nel processo di pubblicazione, prima che la pubblicazione avvenga effettivamente. Puoi farlo estendendo la proprietà PipelineDependsOn come sotto.

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

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

FYI per quanto riguarda la personalizzazione dei .wpp.targets, che era l'unica tecnica che abbiamo avuto per VS2010. La mia raccomandazione qui è la seguente; personalizzare il file .pubxml per la maggior parte dei casi e solo creare un file .wpp.targets se si desidera personalizzare ogni pubblicazione del progetto specificato.

+0

Fantastico! Ha funzionato alla grande Grazie per la spiegazione ... –

+6

Cosa succede se voglio eseguire qualcosa * dopo la pubblicazione * (non prima)? – deerchao

+0

Ciao, sto provando questo su vs2015 e sto ricevendo un errore quando seleziono la pubblicazione. Errore: "L'attributo Nome nell'elemento non è riconosciuto". Qualche idea? – webber

4

dichiarare la ProjectName.wpp.targets seguente file nella root della vostra applicazione web:

<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

Grazie mille per la risposta, Richard. Come puoi vedere nella risposta di Sayed c'è un modo di personalizzare uno specifico profilo di pubblicazione e questo è stato un adattamento migliore nel mio caso. –

+0

Vedere la mia risposta qui sotto sull'utilizzo .wpp.targets con VS2012 –

+0

@SayedIbrahimHashimi - Grazie per il testa a testa. Dovresti prendere in considerazione l'aggiornamento dei documenti poiché sono documentati come uguali (per quanto riguarda la pertinenza). –

Problemi correlati