Birinin VB / C # 'da zip arşivine kadar tüm süreci otomatikleştirmenin ne kadar kolay olduğunu anlamaması durumunda, yukarıdaki tüm iyi cevaplara bir ek.
Bu nedenle, şablonlardan basit bir Form uygulaması alırsınız (halihazırda bir temizlik uygulamanız yoksa) ve ona bir düğme eklersiniz ve ardından ClickOnce özel ayarlar veya herhangi bir şey hakkında endişelenmeden masaüstünüze yüklersiniz. Düğmeye eklemeniz gereken tüm kod budur:
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
Unutulmaması gereken bir şey, dosya sistemi silme işlemlerinin kolayca yanlış gidebileceğidir. En sevdiklerimden biri, bir klasörü silemediğimi fark ettiğimde, yükseltilmiş ayrıcalıklarla çalışırken Visual Studio tarafından oluşturulan öğeler içerdiğiydi (böylece bir hizmette hata ayıklayabilmem için).
Manuel olarak izin vermem veya uygulamayı yüksek ayrıcalıklarla çalıştırmam gerekiyordu. Her iki durumda da, bir komut dosyası üzerinden etkileşimli GUI tabanlı bir yaklaşım kullanmanın bir değeri olduğunu düşünüyorum, çünkü bu uzun bir günün sonunda yapılan bir şey olabilir ve daha sonra yedeklemenizin olduğunu öğrenmek istemezsiniz. aslında yok ...