visual tag studio navigate method code closing close brackethighlighter visual-studio-2010 visual-studio deployment msbuild publish

visual studio 2010 - tag - Después de publicar evento en Visual Studio



visual studio code go to method (5)

Acabo de escribir una publicación sobre cómo logré esto en Visual Studio 2013 aquí: http://www.alexdresko.com/2015/02/28/taking-visual-studio-build-and-publish-events-to-the-next-level/

Esencialmente, esta es la magia:

<Target Name="Mytarget" AfterTargets="MSDeployPublish" > <Message Text="The name of the publish profile is $(DestinationAppRoot)"/> .... Here''s where you do something awesome... </Target>

Te animo a leer el post completo para más información.

Estoy tratando de invocar una tarea simple después de publicar un evento. Cuando digo "publicar", me refiero a publicar en Visual Studio, hacer clic derecho en el proyecto y presionar "Publicar ...". He incluido (importado) el archivo de objetivos en el archivo de proyecto, que funciona bien porque ya lo he probado en el evento Build. He encontrado en http://msdn.microsoft.com/en-us/library/ms366724.aspx que hay un evento AfterPublish que debería hacer lo que necesito, pero no es así. No estoy seguro de si este es un mismo evento que debería activarse al publicar en Visual Studio; alguien, aclare esto. Mi pregunta es cómo desencadenar cualquier tipo de tarea desde el archivo de objetivos en ¿Publicar en Visual Studio?

He intentado esto en el archivo de objetivos:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="AfterPublish"> <Message Label="Test"></Message> <Warning Label="Test"></Warning> </Target> </Project>

Estoy usando Visual Studio 2010.

EDITAR:

De hecho, estoy buscando alguna forma de ejecutar cierta acción en Publicar en Visual Studio. También estaba pensando en agregar eventos de compilación, pero no tengo idea de cómo determinar si la publicación está en progreso o no.

EDITAR: @Alexey Shcherbak gracias por su rápida respuesta. Estoy obteniendo esto en mi salida de MSBuild:

12/10/2012 12:29:40 AM: Done executing task "CallTarget". 12/10/2012 12:29:40 AM: Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj". 12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj". Deleting existing files... Publishing folder /... Publishing folder Account... Publishing folder bin... Publishing folder Scripts... Publishing folder Styles... ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== ========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

Por lo tanto, mi tarea se ejecutará justo después de PipelinePreDeployCopyAllFilesToOneFolder pero antes de la copia real de los archivos y no creo que la publicación se haya realizado todavía en ese momento. Por supuesto, realmente probé esto, así que en la tarea de MSBuild estaba ejecutando una lectura simple de un archivo de texto que se supone que debe copiarse en la carpeta Publicar, y falló.


Agregando mis 2 centavos

MS ha confirmado que, al publicar en el sistema de archivos , no tienen ningún objetivo para iniciar después de eso.

"Actualmente no admitimos la ejecución de objetivos personalizados después de la publicación desde VS para el protocolo del sistema de archivos".

Citado de esta pregunta SO

Entonces lo que terminamos haciendo es:

  1. use AfterTargets="CopyAllFilesToSingleFolderForPackage" (se ejecuta justo antes de que se copien los archivos a la ubicación de publicación)
  2. que ejecuta un archivo de bat
  3. El archivo bat comienza con un comando timeout 10 (espera 10 segundos), por falta de una mejor manera.

IMPORTANTE: este archivo bat debe ejecutarse de forma asíncrona para que el proceso de publicación continúe después de su lanzamiento; consulte esta respuesta SO para saber cómo hacerlo.


El menú contextual de publicación no está ejecutando el objetivo "Publicar" (si estamos hablando de publicar un sitio web, no de publicar el paquete ClickOnce).

Si está utilizando VS2010, el menú contextual ejecutará el objetivo "PipelinePreDeployCopyAllFilesToOneFolder", y en VS2012 (tenga esto en cuenta si va a cambiar) ejecutará el objetivo "MSDeployPublish".

Supongo que deberías leer esta pregunta y respuesta . Jez y yo proporcionamos una respuesta bastante completa sobre cómo conectarnos a Before / After publish target.

En resumen, para la versión de MSBuild> = 4.0 puede usar este enfoque

<Target Name="Mytarget" AfterTargets="PipelinePreDeployCopyAllFilesToOneFolder" > <Message Label="Test"></Message> <Warning Label="Test"></Warning> </Target>

@ Edit1: use CopyAllFilesToSingleFolderForPackage en lugar de PipelinePreDeployCopyAllFilesToOneFolder : los archivos deben copiarse después de este objetivo. Si necesita disparar su objetivo solo cuando se inició en el contexto de VS, revise el enlace que publiqué y agregue algunas condiciones más, para verificar el lanzamiento de Visual Studio de esta manera. Condition="''$(BuildingInsideVisualStudio)''==''true'' AND ''$(VisualStudioVersion)''==''10.0''" Si agrega más contexto, como el tipo de objetivo que desea iniciar después de la publicación, etc., podría agregar más contexto y ayudar a otros a entender el problema.


Intenté todas las otras respuestas, pero simplemente no funcionaron. En mi caso, estoy publicando un complemento de VSTO con VS2015, así que quizás haya algo diferente en marcha, pero aquí hay dos opciones que funcionaron:

<Target Name="AfterPublish"> <Warning Text="publish warning 1" /> </Target> <Target Name="CustomTarget" AfterTargets="AfterPublish"> <Warning Text="publish warning 2" /> </Target>

Parte de la razón por la que yo (y supuestamente otros) lo pasamos mal con esto es que la tarea de Message no parece hacer nada. Esperaba texto en la vista de Output , pero no se mostraba nada. Tampoco hubo elementos de Message en la Error List , pero al usar Warning lugar, aparecieron en la Error List . Desafortunadamente, no sé lo suficiente sobre MSBuild para decir por qué Message no se está comportando como se esperaba.


Mi respuesta para otra pregunta podría ser de alguna utilidad.

El script AfterPublish no se ejecuta cuando publico una aplicación web

En particular, al utilizar la ruta a los ''archivos publicados'', puede pasar un parámetro a través de $(WebProjectOutputDir)/$(WPPAllFilesInSingleFolder) . Esto sería algo así como c:/{path to *.csproj}/obj/{build configuration}/Package/PackageTmp .