15

Obecnie mam zdarzenie post-build skonfigurowany w moim projekcie sieci web programu Visual Studio 2012 tak:Jak wykonać skrypt PowerShell tylko przed uruchomieniem zadania publikowania w sieci w VS 2012?

enter image description here

To w zasadzie wywołuje PowerShell script aby dodać informacje o prawach autorskich do każdego pliku .cs.

Co chciałbym zrobić, to wykonać ten skrypt powershell tylko przed Publikowanie aplikację do zdalnego serwera. W ten sposób nie będę odczuwał opóźnienia za każdym razem, gdy potrzebuję debugowania projektu. Czy znasz jakiś sposób na osiągnięcie tego?


Według Sayed's answer, ja dostosowane do konkretnego profilu publikowania i dodanych w tym:

<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

Przepraszamy, ale czy dodałeś nową grupę PropertyGroup oprócz tej już istniejącej w pubxml? – nokturnal

Odpowiedz

15

to zależy o tym, jak definiujesz wcześniej, ale poniżej jest jedna technika.

Po utworzeniu profilu publikowania za pomocą programu VS2012 utworzy on plik .pubxml w folderze Właściwości \ PublishProfiles (Mój projekt \ PublishProfiles dla VB). Są to pliki MSBuild i można je edytować, aby dostosować proces publikowania. W twoim przypadku możesz wstrzyknąć cel do procesu publikowania, zanim zacznie się wydawanie. Możesz to zrobić, rozszerzając właściwość PipelineDependsOn, jak poniżej.

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

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

FYI dotyczące dostosowywania .wpp.targets, że była to jedyna metoda, która mieliśmy na VS2010. Moje zalecenie tutaj jest następujące; dostosuj plik .pubxml dla większości przypadków i utwórz tylko plik .wpp.targets, jeśli chcesz dostosować każdy publikację danego projektu.

+0

Awesome Sayed! Pracował świetnie. Dzięki za wyjaśnienie ... –

+6

Co jeśli chcę wykonać coś * po * (nie wcześniej) publikowaniu? – deerchao

+0

Cześć Sayed, próbuję tego w vs2015 i pojawia się błąd, gdy wybieram publikowanie. Błąd: "Nazwa atrybutu w elemencie jest nierozpoznana". Jakieś pomysły? – webber

4

stwierdzenie następujące ProjectName.wpp.targets plik w katalogu głównym aplikacji internetowej:

<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

Dziękuję bardzo za odpowiedź Richarda. Jak widać w odpowiedzi Sayeda, istnieje sposób na dostosowanie konkretnego profilu publikowania i to było lepsze dopasowanie w moim przypadku. –

+0

Zobacz poniżej moją odpowiedź na temat używania .wpp.targets z VS2012 –

+0

@SayedIbrahimHashimi - Dzięki za heads up. Powinieneś rozważyć zaktualizowanie dokumentów, ponieważ są one udokumentowane jako równe (jeśli chodzi o trafność). –

Powiązane problemy