que - visual studio c# 2017
Visual Studio: ¿Múltiples comandos de post-compilación? (9)
Visual Studio 2008 me permite declarar un comando y adjuntarlo al evento de creación posterior para un proyecto. Al igual que muchos desarrolladores, lo uso regularmente para copiar archivos en el directorio de salida de la aplicación.
Estoy trabajando en un proyecto en el que necesito copiar archivos de dos lugares diferentes a dos destinos diferentes, todo dentro de un solo proyecto. En otras palabras, necesito invocar dos comandos xcopy diferentes del mismo evento de post-construcción. Parece que el evento posterior a la creación solo tendrá un solo comando, y que si necesito invocar varios comandos, tendré que poner los comandos en un archivo * .bat y llamarlo desde el evento posterior a la construcción.
¿Es correcto o hay una forma más simple de invocar dos comandos del evento post-build? Gracias de antemano por tu ayuda.
Añadiendo a la answer :
Si tiene varias hojas de propiedades con algo que hacer en el mismo evento de compilación, puede hacer lo siguiente para encadenar los comandos:
%(Command)
echo foo
donde %(Command)
expande al valor anterior del comando.
Personalmente hago esto para todos los eventos de compilación, incluso si actualmente no tengo comandos heredados, porque esto asegura que no habrá problemas si agrego hojas de propiedades más adelante.
Cada comando debe estar en una línea separada. Sin embargo, lo que encontré es que si se produce un error al ejecutar uno de esos comandos, falla todo el postcompilación, por lo que tendrás que probar cada comando post-build de uno en uno para depurar.
El enfoque sugerido por womp funciona en Visual Studio 2015/2017 (Windows), pero no funciona en Visual Studio para Mac (Vista previa), que parece ejecutar solo el primero de los comandos. El único enfoque que encontré trabajando en las versiones de Visual Studio de Mac y Windows fue encadenar 2 comandos de MSBuild:
<Target Name="AfterResolveReferences">
<Exec Command="path/MyFirstCommand.exe -parameters" />
</Target>
<Target Name="MySecondCommand" AfterTargets="AfterResolveReferences" >
<Exec Command="path/MySecondCommand.exe -parameters" />
</Target>
El ejemplo anterior usa el evento "AfterResolveReferences" pero obviamente debería funcionar para el evento PostBuild también.
Hay otra opción: puede separar los comandos con &&
. P.ej
copy $(TargetPath) d:/folder1 && copy $(TargetPath) d:/folder2
Esto no es exactamente lo mismo que separar con líneas nuevas: con &&
, si el comando anterior falló, el siguiente comando no se ejecutará.
Separar por nuevas líneas es más fácil de leer, por lo que debería preferirlo. Sin embargo, sé al menos un caso cuando &&
es útil. Es el escenario, cuando utiliza hojas de propiedades para tener diferentes pasos posteriores a la construcción en diferentes máquinas. VS 2008 no permite establecer PostBuildStep en hojas de propiedades directamente, pero puede agregar una macro de usuario con su comando y llamarlo desde la configuración principal del proyecto. Una macro es una sola línea, por lo que puede usar &&
para tener múltiples comandos allí.
Importante: al ejecutar un archivo por lotes, debe usar la declaración "call" para que se ejecuten las siguientes líneas. Si no usa "call", la ejecución entra en .bat y no regresa a las siguientes líneas. Lo mismo que en el prompt de DOS.
p.ej:
call MyBatch1.bat
call MyBatch2.bat
No hay una buena solución para este problema. La idea de llamada hace que se ejecuten otros scripts. Me di cuenta de que la detección de errores no funcionará. Ponga ''exit / b 1'' en FailMe.cmd El uso de ''call FailMe.cmd'' en los pasos posteriores a la compilación. Tenga en cuenta que la construcción no falla? Estoy usando VS 2017 construyendo un proyecto de C #. Ahora pruébalo con ''FailMe.cmd''. La compilación ahora informa un error.
Por lo tanto, es mejor que solo use una sola secuencia de comandos, si el informe de errores es importante.
Puede escribir tantos comandos de compilación posterior como desee. Solo sepárelos por líneas nuevas.
Aquí hay un ejemplo de uno de mis proyectos.
Separar los comandos con & o && o; no funciona en VS2017. No puedo creer que tal funcionalidad simple no esté disponible en VS2017. Visual Studio intenta ejecutar todo el texto en la ventana de eventos posteriores a la construcción como una cadena. La única opción para mí ahora es crear un script por lotes que no me guste particularmente.
Simplemente prefija "llamar" a su secuencia de comandos por lotes. De modo que las declaraciones debajo del script por lotes también se ejecutan después de devolver la llamada del script por lotes.
call Script1.cmd
call Script2.bat