powershell visual-studio-2012 publish msdeploy post-build-event

¿Cómo ejecutar un script de PowerShell solo antes de una tarea de publicación de despliegue web en VS 2012?



visual-studio-2012 publish (3)

Actualmente tengo un evento posterior a la compilación configurado en mi proyecto web con Visual Studio 2012 como este:

Básicamente, esto llama a un script de PowerShell para agregar un aviso de copyright a cada archivo .cs.

Lo que me gustaría hacer es ejecutar este script de powershell solo antes de publicar la aplicación web en el servidor remoto. Al hacerlo, no experimentaré un retraso cada vez que necesite depurar el proyecto. ¿Conoces alguna forma de lograr esto?

De acuerdo con la respuesta de Sayed , personalicé un perfil de publicación específico y agregué esto:

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


Declare el siguiente archivo ProjectName.wpp.targets en la raíz de su aplicación 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>


Depende de cómo se defina antes pero a continuación hay una técnica.

Cuando creas un perfil de publicación con VS2012, te creará un archivo .pubxml en la carpeta Propiedades / PublishProfiles ( Mi Proyecto / PublishProfiles para VB ). Estos son archivos de MSBuild y puede editarlos para personalizar el proceso de publicación. En su caso, puede inyectar un objetivo en el proceso de publicación, antes de que se produzca la publicación. Puede hacerlo extendiendo la propiedad PipelineDependsOn como se muestra a continuación.

<PropertyGroup> <PipelineDependsOn> CustomBeforePublish; $(PipelineDependsOn); </PipelineDependsOn> </PropertyGroup> <Target Name="CustomBeforePublish"> <Message Text="********************************** CustomBeforePublish ***********************************" Importance="high"/> </Target>

Para su información con respecto a la personalización de .wpp.targets, esa era la única técnica que teníamos para el VS2010. Mi recomendación aquí es la siguiente; personalice el archivo .pubxml para la mayoría de los casos y cree solo un archivo .wpp.targets si desea personalizar cada publicación del proyecto dado.


La respuesta de Sayed soluciona el problema. Sin embargo, pensé en proporcionar una respuesta totalmente funcional (pruebas en Visual Studio 2017):

<PropertyGroup> <PipelineDependsOn> PreBuildScript; $(PipelineDependsOn); </PipelineDependsOn> </PropertyGroup> <Target Name="PreBuildScript"> <Message Text="Executing prebuild script" Importance="high"/> <Exec Command="powershell.exe -file &quot;$(ProjectDir)/InnerFolder/script.ps1&quot;" /> </Target>

Nota: Esto se ejecutará tanto para la vista previa como para la acción de publicación real, por lo que se pueden encontrar errores previos a la publicación antes de la publicación real.