ultimate - Necesita un "evento de limpieza posterior" en Visual Studio
visual studio español (6)
Obtuve un proyecto VS con un evento posterior a la compilación con un comando de línea de comandos que copia un archivo (.dll) al directorio de destino de bin (depuración o lanzamiento). Cuando hago un "Limpio" en el proyecto, todo se limpia, pero este archivo permanece. ¿Hay alguna forma de anunciar eventos posteriores a la limpieza para que yo también pueda eliminar este archivo?
Creo que algo cambia con Visual Studio 2017.
Trabaja con la etiqueta: AfterTargets = "Clean"
<Target Name="AfterClean" AfterTargets="Clean">
<!-- Remove bin folder -->
<RemoveDir Directories="$(TargetDir)" />
<!-- Remove obj folder -->
<RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" />
</Target>
Descubrí que la respuesta de Leom Burke con "Eliminar archivos" no funciona con comodines y no le dice que algo salió mal. Esto es lo que he hecho en su lugar:
<Target Name="BeforeClean">
<Message Text="Cleaning other files..."/>
<Exec Command="del $(ProjectDir)css/*.* /F /Q"/>
<Exec Command="del $(ProjectDir)images/*.* /F /Q" />
<Exec Command="del $(ProjectDir)js/*.* /F /Q" />
<Exec Command="del $(ProjectDir)usercontrols/*.* /F /Q" />
<Exec Command="del $(ProjectDir)MasterPages/*.* /F /Q" />
<Exec Command="del $(ProjectDir)App_Data/TEMP/*.* /F /Q /S" />
<Exec Command="del $(ProjectDir)App_Data/Logs/*.* /F /Q /S" />
</Target>
Escribí lo anterior para eliminar archivos en una solución de umbraco para que cuando hago una diferencia con lo que está en el control de la fuente, no se confunda el moco.
Puede actualizar el archivo csproj para especificar un nuevo destino. Tendrás que hacer esto en un editor de texto.
Eche un vistazo a la documentación aquí: Cómo: Extender el proceso de compilación de Visual Studio .
Tendrá que cambiar especialmente el <Target name=''AfterClean''>
Puedes hacer comodines usando la función integrada de Borrar.
<Target Name="AfterClean">
<ItemGroup>
<FilesToDelete Include="$(TargetDir)/*.txt"/>
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
Punta de sombrero para @ scrat789 con respecto a AfterTargets .
Para VS 2017, v15.6.0 Preview 2.0, terminé con lo siguiente:
<Target Name="MyDistClean" AfterTargets="Clean">
<Message Text="Deleting wwwroot/dist files" Importance="high" />
<Delete Files="$(ProjectDir)/wwwroot/dist/*.*" ContinueOnError="true" />
</Target>
Unas pocas cosas:
- Observe que estoy usando un nombre de destino único, MyDistClean . La especificación del nombre, AfterClean , no funcionó.
- No fue necesario volver a cargar el csproj después de la edición para ejecutar / probar la tarea Limpiar.
- La importancia del mensaje es alta para evitar cambiar el nivel de verbosidad de MSBuild mencionado aquí en SO: AfterClean Target no se invoca cuando limpio el proyecto
- La tarea MyDistClean se procesó tanto en la solución como en el alcance del proyecto.
Aquí está la tarea mejorada para borrar el directorio dist de webpack en Clean:
<Target Name="MyDistClean" AfterTargets="Clean">
<ItemGroup>
<DistDir Include="$(ProjectDir)wwwroot/dist" />
</ItemGroup>
<Message Text="Deleting @(DistDir)" Importance="high" />
<RemoveDir Directories="@(DistDir)" />
</Target>
Puede editar el archivo del proyecto directamente y agregar el destino al final del archivo. BeforeClean
y AfterClean
son objetivos como se explica aquí:
http://blogs.msdn.com/b/msbuild/archive/2005/11/23/496396.aspx
Debería poder poner una tarea Eliminar en el destino.
EDITAR Solo probé esto (haga clic derecho en proyecto -> descargar -> haga clic derecho -> editar) y el siguiente objetivo es lo que necesita:
<Target Name="AfterClean">
<Delete Files="$(TargetDir)/*.txt" />
</Target>
Esto funciona cuando limpia el proyecto pero no la solución; funciona pero no al 100%.