Solo un apéndice a todas las buenas respuestas anteriores en caso de que alguien no se dé cuenta de lo fácil que es en VB / C # automatizar todo el proceso hasta el archivo zip.
Así que solo toma una aplicación de Formularios simple de las plantillas (si aún no tienes una aplicación de limpieza) y le agregas un botón y luego ClickOnce lo instala en tu escritorio sin preocuparte por configuraciones especiales o mucho de nada. Este es todo el código que necesita adjuntar al botón:
Imports System.IO.Compression
Private Sub btnArchive_Click(sender As Object, e As EventArgs) Handles btnArchive.Click
Dim src As String = "C:\Project"
Dim dest As String = Path.Combine("D:\Archive", "Stub" & Now.ToString("yyyyMMddHHmmss") & ".zip")
If IsProjectOpen() Then
MsgBox("Close projects first, (expletive deleted)", vbOKOnly)
Exit Sub
End If
If MsgBox("Are you sure you want to delete bin and obj folders?", vbOKCancel) = DialogResult.Cancel Then Exit Sub
If ClearBinAndObj(src) Then ZipFile.CreateFromDirectory(src, dest)
End Sub
Public Function ClearBinAndObj(targetDir As String) As Boolean
Dim dirstodelete As New List(Of String)
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "bin")
dirstodelete.Add(d)
Next
For Each d As String In My.Computer.FileSystem.GetDirectories(targetDir, FileIO.SearchOption.SearchAllSubDirectories, "obj")
dirstodelete.Add(d)
Next
For Each d In dirstodelete
Try
Directory.Delete(d, True)
Catch ex As Exception
If MsgBox("Error: " & ex.Message & " - OK to continue?", vbOKCancel) = MsgBoxResult.Cancel Then Return False
End Try
Next
Return True
End Function
Public Function IsProjectOpen()
For Each clsProcess As Process In Process.GetProcesses()
If clsProcess.ProcessName.Equals("devenv") Then Return True
Next
Return False
End Function
Una cosa para recordar es que las eliminaciones del sistema de archivos pueden salir mal fácilmente. Uno de mis favoritos fue cuando me di cuenta de que no podía eliminar una carpeta porque contenía elementos creados por Visual Studio mientras se ejecutaba con privilegios elevados (para poder depurar un servicio).
Necesitaba dar permiso manualmente o, supongo, ejecutar la aplicación también con privilegios elevados. De cualquier manera, creo que es valioso utilizar un enfoque interactivo basado en GUI sobre un script, especialmente porque es probable que esto sea algo que se hace al final de un largo día y no querrá descubrir más tarde que su copia de seguridad en realidad no existe ...