msbuild - desktopbuildpackagelocation - AfterPublish target no funciona
publish msbuild (4)
Estoy un poco perezoso ahora mismo para descubrir el enredo de objetivos para encontrar el adecuado para una publicación basada en archivos (en el que podría estar interesado). Lo que puede hacer mientras tanto es definir un objetivo de AfterBuild en el archivo * .pubxml.
<Target Name="AfterBuild">
...
Recomiendo también desactivar la propiedad "DeleteExistingFiles" porque si copia archivos en los directorios que se están publicando, se realiza una limpieza en algún lugar durante el proceso de publicación.
<DeleteExistingFiles>False</DeleteExistingFiles>
La tarea más sencilla del mundo (ver a continuación) no se ejecuta después de que publique el proyecto de mi aplicación web. ¿Alguna idea de por qué?
<Target Name="AfterPublish">
<Copy SourceFiles="C:/A.txt" DestinationFiles="C:/B.txt" />
</Target>
Nota: Lo siguiente se aplica a VS2010 y la publicación de proyectos de aplicaciones web con el método de publicación "Implementación web" seleccionado en el cuadro de diálogo ''Crear / Publicar {nombre del proyecto}''.
La correcta de Julien Hoarau en que "Publicar" NO es el nombre del objetivo msbuild invocado en el caso anterior; el nombre de destino real es "MSDeployPublish" .
Por lo tanto, debe definir un elemento "Objetivo" cuyo valor del atributo "AfterTarget" se establezca en "MSDeployPublish" : el valor del atributo "Nombre" no importa (siempre que sea exclusivo entre los nombres de destino).
Aquí está cómo hacerlo:
- Abra el archivo de proyecto (por ejemplo, * .csproj) en un editor de texto / XML y, justo antes de la etiqueta de cierre
</Project>
, agregue un elemento<Target Name="CustomPostPublishAction" AfterTargets="MSDeployPublish">
elemento; elija un nombre de su elección para "CustomPostPublishAction". - Agregue un elemento secundario denominado Task que realiza la acción deseada; por ejemplo, para agregar un comando a ser pasado 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 las cadenas de comando, use referencias de entidad (?) XML en lugar de caracteres que romperían el análisis XML, por ejemplo, "& gt" en lugar de "<".
- Para obtener información sobre el elemento
<Target>
en general, consulte http://msdn.microsoft.com/en-us/library/t50z2hka.aspx - Referencia de elementos de tarea aquí: http://msdn.microsoft.com/en-us/library/7z253716.aspx
- En general, si necesita determinar el nombre del destino msbuild.exe que es realmente invocado por Visual Studio 2010, haga lo siguiente:
- Vaya a Herramientas / Opciones ..., Proyecto y Soluciones / Construir y Ejecutar, seleccione ''Detallado'' (o, para obtener más información, ''Diagnóstico'') de la lista desplegable etiquetada ''verbosidad de resultados de compilación del proyecto MSBuild.
- Después de ejecutar la acción de compilación / publicación, p. Ej., Compilación / publicación, examine la ventana de resultados para la última aparición de la cadena "Destino de construcción finalizado" para determinar el objetivo de nivel superior que se invocó.
Visual Studio 2013. Publicar la aplicación web al 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 como Detallado. Búsquelo en Herramientas -> Opciones -> Proyectos y Solutinos -> Construir y Ejecutar -> Detalles de salida de MSBuild. El diagnóstico también está bien si desea investigar qué objetivo de compilación se ejecutó por última vez antes de la publicación real.
- Debe definir anular el destino al final de su archivo, después de
<Import ... />
Inicie MSBuild con verbosidad detallada para ver por qué se ignora su objetivo:
msbuild project.csproj /t:Target_to_Launch /v:d
Se llama a AfterPublish
después de Publish
destino, pero Publish
no es el destino al que se publica cuando publica una aplicación web. Publish
es el objetivo para publicar la aplicación ClickOnce .
Tendrá que encontrar el destino utilizado cuando llame a Publish
en Visual Studio, podría ser Package
, WebPublish
...