2009-03-10 11 views
17

En nuestro proceso de compilación, para cada proyecto usamos eventos Post Build para copiar nuestros archivos ejecutables en un directorio de implementación por separado. Eso funciona de maravilla, pero el problema es que nos encontramos con problemas con los archivos obsoletos después de realizar una solución limpia/proyecto limpio. Me gustaría configurar un evento "Limpiar" que elimine el archivo copiado y Visual Studio 2008 no parece proporcionar una opción en la página de propiedades del proyecto.Cómo crear un evento personalizado de limpieza (post-limpieza) en Visual Studio 2008?

Tiene:

Build Events: 
    Pre-Build Event 
    Pre-Link Event 
    Post-Build Event 
Custom Build Step 
    General 

Lo que me gustaría encontrar alguna manera de ejecutar una línea de comandos arbitrarios cuando se limpia el proyecto.

Respuesta

1

Tendrá que editar los archivos .csproj a mano y agregar un objetivo "AfterClean".

+0

Scott - ¿Podría detallar cómo agregar el objetivo "AfterClean"? – Marc

+0

¿Quiere decir .vsproj - no .csproj? – Marc

1

Desafortunadamente, no hay una forma documentada de insertar pasos de limpieza personalizados. Puedes limpiar tu salida en tu evento previo a la construcción, pero eso dejará artefactos justo después de una limpieza.

De MSDN, aquí está el orden de invocación para los distintos pasos de generación:

  1. evento Pre-BUILD
  2. personalizada pasos en archivos individuales
  3. generador de proxy
  4. de MIDL
  5. Compilador de recursos
  6. El compilador C/C++
  7. Previo Enlace caso
  8. enlazador o bibliotecario (según el caso)
  9. BSCMAKE
  10. paso de generación personalizada en el
  11. herramienta de implementación del proyecto.
  12. posterior a la generación de eventos

    MSDN: Understanding custom build steps

+0

Me da una idea: escriba una secuencia de comandos de limpieza en Preconstrucción, establezca Post-compilación solo para ejecutar en compilación exitosa y escriba a propósito un error de sintaxis básico en su código. Build (Pre-Build hace cosas personalizadas). Clean Project (limpieza normal). – Kache

7

Sé que esto es una cuestión de edad, sino que surgió como un Google golpeó mientras yo estaba investigando exactamente el mismo problema, por lo que' estoy respondiéndolo de todos modos. :-)

Para los proyectos de Visual C++, debe agregar los archivos a la sección "Extensiones para eliminar al limpiar" en las propiedades de configuración del proyecto "General". A pesar de que afirma querer extensiones, en realidad está utilizando globs y aceptará con gusto las rutas completas y expandirá las variables de MSBuild. Esto funcionó para mí:

$(ProjectDir)\deployment\*.*

no estoy seguro de si se puede quitar directorios de esta manera, pero al menos puede obtener los archivos.

+3

Esto no funciona para mí. No puedo especificar una ruta completa ni una relativa utilizando VS 2012 – garlix

31

Puede usar la sintaxis del objetivo MSBuild en su archivo csproj. por ejemplo

<Target Name="AfterClean"> 
    <Delete Files="$(OutDir)\$(TargetName).exe" ContinueOnError="true" /> 
    </Target> 

Existe una clara forma de editar su.archivo csproj directamente en el IDE de Visual Studio descrito en el blog del equipo MSBuild, pero esta es mi primera publicación, así que solo puedo incluir un hipervínculo. (brevemente: descargue el proyecto, luego haga clic derecho sobre él para ver la entrada "Editar [proyecto] .csproj" ... su csproj aparecerá en el IDE como un archivo xml con intellisense en elementos y atributos. ¡Maravilloso!)

una lista completa de los objetivos personalizados está aquí: http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx

+1

Nota al margen: también puede editar el archivo .csproj en el bloc de notas [++], y cuando se guarda, Visual Studio lo detecta para volver a cargar el proyecto. Para múltiples ensayos y errores incesantes, esto fue un poco más rápido. No tiene el intellisense sin embargo. – goodeye

+3

La pregunta está etiquetada con [C++] y [visual-C++], lo que implica que tendría un archivo '.vcproj' en lugar de un archivo' .csproj'. Los formatos de archivo parecen ser diferentes – user1354557

0

Los otros no hacen exactamente lo que quería, y me acaba de encontrar una mejor manera. Probado en VS2010 para un proyecto C++ Win32, vaya a Propiedades del proyecto -> Propiedades de configuración -> Configuración de compilación personalizada. Puede agregar una línea de comando personalizada y decirle a VS qué operación ejecutará el comando antes o después.

+2

Parece que la función no funciona para el evento Clean. Hay otros eventos limpios, como CppClean, CoreClean y otros. No tuve tiempo de probarlos todos. Tal vez he cometido un error. – Samuel

1

Si utiliza "Propiedades del proyecto -> Propiedades de configuración -> Configuración de compilación personalizada", debe recordar rellenar el campo 'Salidas'; de lo contrario, no se ejecutará.

de:

http://blogs.msdn.com/b/visualstudio/archive/2010/04/26/custom-build-steps-tools-and-events.aspx

"La propiedad salidas es una lista por punto y coma de archivos, y debe listar aquellos ficheros generados como parte de la ejecución de su paso de generación Si deja su. Salidas de propiedades vacías, su Custom Build Step nunca se ejecutará, ya que MSBuild determinará que no hay salidas desactualizadas. Si su paso no genera archivos pero aún desea que se ejecute con cada compilación, crear un nombre de archivo falso hará el truco, ya que ese archivo nunca existirá y MSBuild siempre determinará que el paso de compilación personalizada está desactualizado ".

Cuestiones relacionadas