2010-08-24 14 views
25

La tarea más simple del mundo (ver a continuación) no se está ejecutando después de publicar mi proyecto de aplicación web. ¿Alguna idea de por qué?El objetivo AfterPublish no funciona

<Target Name="AfterPublish"> 
    <Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" /> 
</Target> 

Respuesta

2
  • Debe definir anular el objetivo al final de su archivo, después de <Import ... />
  • lanzamiento MSBuild con la verbosidad detallada para ver por qué su objetivo es ignorado:

    msbuild project.csproj /t:Target_to_Launch /v:d 
    

AfterPublish se llama después del objetivo Publish, pero Publish no es el destino calle d cuando publica una aplicación web. Publish es el objetivo para publicar ClickOnce aplicación.

Vas a tener que encontrar el destino utilizado cuando se llama Publish en Visual Studio, que podría ser Package, WebPublish ...

+0

Está justo después de la etiqueta Importar. – Mark

+0

Aquí hay algunos aspectos destacados de la salida: Reemplazando el objetivo "AfterPublish" en el proyecto "c: \ ... \ Microsoft.Common.targets" con el objetivo "AfterPublish" del proyecto "C: \ ... \ Ara.Web .csproj ". Objetivo "_DeploymentUnpublishable" en el archivo "c: \ ... \ Microsoft.Common.targets" del proyecto "C: \ ... \ Ara.Web.csproj": Tarea "Mensaje" Salto de proyecto imposible de publicar. Puedo publicarlo desde Visual Studio, pero la tarea AfterPublish no funciona. – Mark

29

Nota: Lo siguiente se aplica a los proyectos de aplicaciones web VS2010 y publicación con el " Web Deploy "método de publicación seleccionado en el diálogo 'Generar/publicar {nombre de proyecto}'.

Julien Hoarau tiene razón en que "Publicar" NO es el nombre del objetivo de msbuild invocado en el caso anterior; el nombre del objetivo real es "MSDeployPublish".

Por lo tanto, usted tiene que definir un "blanco" elemento cuya valor "AfterTarget" de atributo se establece en "MSDeployPublish" - el "Nombre" el valor del atributo hace no cuestión (siempre y cuando sea único entre los nombres de destino).

Así es como se hace:

  • Abrir el archivo de proyecto (por ejemplo, * .csproj) en un editor de texto/XML y, justo antes de la etiqueta de cierre </Project>, añadir un elemento de <Target Name="CustomPostPublishAction" AfterTargets="MSDeployPublish">; elija un nombre de su elección para "CustomPostPublishAction".
  • Agregue un elemento llamado tarea secundaria que realiza la acción deseada; por ejemplo, para agregar un comando que se pasará a cmd.exe, use un elemento <Exec Command="..." />.

Ejemplo:

<Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish" > 
    <Exec Command="echo Post-PUBLISH event: Active configuration is: $(ConfigurationName)" /> 
</Target> 

Nota: (?)

  • En cadenas de comandos, entidad uso de XML referencias en lugar de caracteres que se rompería el análisis de XML, por ejemplo, "& gt" en lugar de "<".
  • Para la documentación del elemento <Target> en general, vea Referencia aquí http://msdn.microsoft.com/en-us/library/t50z2hka.aspx
  • Task-elementos: http://msdn.microsoft.com/en-us/library/7z253716.aspx
  • En general, si es necesario determinar el nombre de la msbuild.El objetivo exe que en realidad es invocado por Visual Studio 2010, haga lo siguiente:
    • Vaya a Herramientas/Opciones ..., Proyecto y soluciones/Generar y ejecutar, seleccione 'Detallado' (o, para obtener más información, 'Diagnóstico ') de la lista desplegable etiquetada' MSBuild Project Build Out Verbosity.
    • Después de ejecutar la acción de compilación/publicación, p. Construir/Publicar, examine la ventana de Salida para el último ocurrencia de la cadena "Done building target" para determinar el objetivo de nivel superior que se invocó.
+2

Hola, ¿sabes si hay una forma de que funcione con la publicación de FTP? –

+0

Me gustaría hacer que esto funcione para File System publicar ... any ideia cómo? Gracias. –

+0

@MauricioRamalho: Te sugiero que hagas una _nueva pregunta_ (crea una nueva publicación) con detalles. (Personalmente ya no seré de mucha ayuda, ya que no he trabajado con estas cosas en años, pero estoy seguro de que alguien podrá ayudarlo.) – mklement0

0

soy un poco perezoso en este momento para averiguar el lío de objetivos para encontrar el más adecuado para una basada en archivos publicar (que puede estar interesado en). Lo que puede hacer mientras tanto es definir un objetivo AfterBuild en el archivo * .pubxml.

<Target Name="AfterBuild"> 

...

También recomienda desactivar los "DeleteExistingFiles" propiedad porque si copia los archivos en los directorios de ser publicados, se hace una limpieza en algún momento durante el proceso de publicación.

<DeleteExistingFiles>False</DeleteExistingFiles> 
16

Visual Studio 2013. Publique la aplicación web en el sistema de archivos.

<Target Name="Moose" AfterTargets="GatherAllFilesToPublish" > 
    <Message Importance="high" Text="***Moooooooooooooooose***$(WPPAllFilesInSingleFolder)***$(TargetDir)" /> 
    </Target> 

Nota: Asegúrese de que el registro de compilación está configurado al menos en Detallado. Búscalo en Herramientas -> Opciones -> Proyectos y Solutinos -> Construir y ejecutar -> Nivel de detalle de salida MSBuild. El diagnóstico también es correcto si desea investigar qué objetivo de compilación se ejecutó por última vez antes de la publicación real.

+4

Este es el único objetivo que se dispara para mí en VS2015 al realizar un sistema de archivos publicar un proyecto de aplicación web. Ni MSDeployPublish ni AfterPublish funcionan. – Rich

+0

Si desea publicar el trayecto, use $ (PublishUrl) – mslot

+0

¡Sí! Esa es la respuesta que estaba buscando, ¡por tanto tiempo! – Daniel

Cuestiones relacionadas