visual studio 2012 - studio - Evento posterior a la construcción VS2012 no se dispara
visual studio agregar referencia (4)
Tengo un proyecto web que activa un evento posterior a la compilación "En una compilación exitosa" para realizar algunas actividades de limpieza / migración (secuencia de comandos).
En VS2012, la construcción posterior al éxito SOLO se dispara cuando hay un cambio de código. Si no hay un cambio en el código, el compilador aún informa que la compilación es exitosa, sin embargo, el evento post-build exitoso no se dispara.
En VS2010, el evento posterior a la compilación se inicia con éxito en cada compilación exitosa independientemente de los cambios de código. Esto es lo que yo esperaría. La compilación fue exitosa, incluso si no se produjeron cambios, por lo que el evento debería activarse.
Ejemplo de compilación de VS2012 con cambio de código:
------ Build started: Project: ABC.Business.Web.Migrate, Configuration: Debug Any CPU ------
Build started 2012-08-23 01:26:13.
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
C:/Windows/Microsoft.NET/Framework/v4.0.30319/Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:en-US /highentropyva- /reference:"C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0/mscorlib.dll" /reference:C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Business.Web.dll /reference:"C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0/System.Core.dll" /debug+ /debug:full /optimize- /out:obj/Debug/ABC.Web.Migrate.dll /target:library /utf8output Properties/AssemblyInfo.cs "C:/Users/Administrator/AppData/Local/Temp/.NETFramework,Version=v4.0.AssemblyAttributes.cs"
_CopyFilesMarkedCopyLocal:
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Business.Web.dll" to "bin/ABC.Business.Web.dll".
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Web.dll" to "bin/ABC.Web.dll".
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC._Services.dll" to "bin/ABC._Services.dll".
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Business.Web.pdb" to "bin/ABC.Business.Web.pdb".
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Web.pdb" to "bin/ABC.Web.pdb".
Copying file from "C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC._Services.pdb" to "bin/ABC._Services.pdb".
CopyFilesToOutputDirectory:
Copying file from "obj/Debug/ABC.Web.Migrate.dll" to "bin/ABC.Web.Migrate.dll".
ABC.Business.Web.Migrate -> C:/Dev/ABC/Source/ABC.Business.Web.Migrate/bin/ABC.Web.Migrate.dll
Copying file from "obj/Debug/ABC.Web.Migrate.pdb" to "bin/ABC.Web.Migrate.pdb".
PostBuildEvent:
"C:/Dev/bin/spawn.exe" "C:/Dev/ABC/Scripts/Migrate Business Web.bat"
Build succeeded.
Time Elapsed 00:00:00.34
========== Build: 4 succeeded, 0 failed, 53 up-to-date, 0 skipped ==========
Ejemplo de compilación de VS2012 sin cambio de código:
------ Build started: Project: ABC.Business.Web, Configuration: Debug Any CPU ------
Build started 2012-08-23 01:36:04.
GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with respect to the input files.
CopyFilesToOutputDirectory:
ABC.Business.Web -> C:/Dev/ABC/Source/ABC.Business.Web/bin/ABC.Business.Web.dll
Build succeeded.
Time Elapsed 00:00:00.31
========== Build: 1 succeeded, 0 failed, 56 up-to-date, 0 skipped ==========
Intenté usar el evento "Siempre" posterior a la compilación en VS2012. Solo dispara el evento Siempre posterior a la compilación si hay un cambio de código (idéntico a En éxito). Mi única solución ha sido hacer una reconstrucción, ¡dolorosa cuando tengo docenas de proyectos dependientes! O ejecute manualmente mi script - también molesto! (Y NO, no es mi script; este script funciona perfectamente bien cuando hay un cambio de código, como lo ilustra el primer ejemplo).
Esto es un cambio intencional o un error.
¿Alguien más ha experimentado este problema posterior a la construcción en VS2012?
Es posible que los eventos posteriores a la compilación no se ejecuten correctamente si la propiedad PostBuildEvent
se define antes de la importación de $(MSBuildToolsPath)/Microsoft.CSharp.targets
. Asegúrese de que <PropertyGroup>
define el evento de compilación posterior esté después de la importación de este archivo.
Ejemplo de un archivo msbuild incorrecto:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Snip -->
<!-- DO NOT USE, INCORRECT ORDERING OF IMPORT -->
<PropertyGroup>
<PostBuildEvent>echo $(TargetName)</PostBuildEvent>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />
</Project>
Ejemplo de un archivo msbuild correcto:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Snip -->
<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>echo $(TargetName)</PostBuildEvent>
</PropertyGroup>
</Project>
Para mí, necesitaba esta respuesta , que indica que si estás llamando a un archivo por lotes, utiliza:
CALL mybatch
CALL anothercommand
En lugar de usar directamente el comando:
mybatch
anothercommand
solo se mybatch
si no se usa CALL
.
Tuve el mismo problema y lo resolví de la siguiente manera:
- Agrega algún archivo de texto vacío vacío al proyecto.
- Propiedad "Build Action": Contenido.
- propiedad "Copiar en el directorio de salida": Siempre.
Eso es, ejecutará el paso POST-BUILD siempre, incluso si el proyecto está actualizado o no es el proyecto de inicio.
Tuve un problema similar y esto me ayudó:
Herramientas ... Opciones ... Proyectos y Soluciones ... Construir y Ejecutar ...
Desmarque "Sólo compilar proyectos de inicio y dependencias en Ejecutar"
Como se sugiere aquí: Evento posterior a la compilación en ejecución (F5) ¿En Visual Studio?