Cómo desactivar el almacenamiento en caché de definiciones de comstackción en Visual Studio

En el archivo de proyecto, importo mi propio archivo de destino

 

y luego llamo a destino desde ese archivo de destino

  

Si edito el archivo CopyDependencies.target, tengo que volver a cargar toda la solución y solo entonces los cambios en CopyDependencies.target entran en vigencia. Creo que es un tipo de almacenamiento en caché de definiciones de comstackción en Visual Studio? Si es así, ¿quizás se puede desactivar?

Gracias @KazR

Aquí hay una solución más pequeña que puede insertar en su archivo .csproj

   Build.$([System.Guid]::NewGuid()).proj         

Problema resuelto

No sé cómo podría deshabilitar el caché de VS, sin embargo, es posible que tenga una solución que le permita editar el objective de comstackción sin tener que volver a cargar la solución.

Puede usar la tarea MSBuild en su archivo proj para llamar a un destino contenedor que copia su archivo CopyDependencies.target a CopyDependencies. [RandomNumber] .target, luego invoca su destino CopyDependencies en el archivo recién creado, y finalmente lo elimina.

Esto obligaría a VS a volver a cargar el destino en cada invocación ya que el nombre del archivo es diferente.

Aquí hay un ejemplo:

myProject.proj

Agregue esto al objective AfterBuild:

  

Wrapper.target

Aquí tenemos el objective que, en tiempo de comstackción, copie el archivo de destino real e invoque el objective de comstackción deseado dentro de él (he utilizado una tarea c # en línea que solo está disponible en MSBuild 4.0):

         Random rndGenerator = new Random(); Number = rndGenerator.Next(Int32.MaxValue);           inner.test.$(FileNumber).target      

inner.test.target

Este contiene el objective de comstackción real que desea ejecutar, en este ejemplo es una copia de archivo simple.

      

Esto no está listo para la producción, pero con suerte ilustra mi punto.

Con este proceso (un poco intrincado), puede cambiar el archivo inner.test.target sin tener que volver a cargar la solución en VS.

Tengo una solución diferente, que no incluye archivos temporales:

Archivo Include.targets:

      

Archivo de proyecto:

 ....    .... 

en este caso, VS no reconoce el comando MSBuild y no almacena en caché el archivo.

feliz encoding!

Aquí hay una solución que no requiere ningún script de MSBuild.

Noté que descargar y volver a cargar un proyecto no soluciona el problema, pero cerrar y volver a abrir la solución sí lo hace. Además, Visual Studio le pedirá que vuelva a cargar la solución si nota que el archivo .sln ha cambiado. Y finalmente, esta pregunta de superusuario explica cómo tocar un archivo en Windows.

Poniéndolos juntos, agregué una herramienta externa de Visual Studio para tocar el archivo de solución actual. Así es cómo:

  1. Seleccione HERRAMIENTAS> Herramientas externas …
  2. Haga clic en el botón Agregar para agregar una nueva herramienta.
  3. Establezca las propiedades de la siguiente manera:
    • Título: Recargar la solución
    • Comando: cmd.exe
    • Argumentos: / c copia “$ (SolutionFileName)” +> nul
    • Directorio inicial: $ (SolutionDir)
    • y activa la ventana Usar salida
  4. Haga clic en Aceptar para cerrar la ventana Herramientas externas

Ahora, si ha realizado cambios en sus archivos de MSBuild, simplemente seleccione HERRAMIENTAS> Volver a cargar la solución y todos sus archivos de comstackción serán recargados.

Estoy usando Windows 7 de 64 bits y Visual Studio 2012 Express para escritorio de Windows.

Antes de ejecutar MSBuild , ejecuto esto para borrar el caché de descarga:

 call "%VS120COMNTOOLS%vsvars32.bat" echo Clear download cache gacutil -cdl