Jika Anda mengklik kanan pada folder, Anda akan melihat item menu "Clean". Saya berasumsi ini akan membersihkan (menghapus) direktori obj dan bin. Namun, sejauh yang saya bisa lihat, itu tidak melakukan apa-apa. Apakah ada cara lain? (tolong jangan beri tahu saya untuk pergi ke Windows Explorer atau cmd.exe) Saya ingin menghapus folder obj dan bin sehingga saya dapat dengan mudah membuat zip semuanya.
visual-studio
msbuild
tom7
sumber
sumber
Jawaban:
Seperti yang telah ditanggapi oleh orang lain, Bersih akan menghapus semua artefak yang dihasilkan oleh build. Tapi itu akan meninggalkan yang lainnya.
Jika Anda memiliki beberapa penyesuaian dalam proyek MSBuild Anda, ini dapat menyebabkan masalah dan meninggalkan hal-hal yang menurut Anda seharusnya telah dihapus.
Anda dapat menghindari masalah ini dengan perubahan sederhana pada. * Proj Anda dengan menambahkan ini di suatu tempat di dekat bagian akhir:
<Target Name="SpicNSpan" AfterTargets="Clean"> <RemoveDir Directories="$(OUTDIR)"/> </Target>
Yang akan menghapus semua yang ada di folder bin Anda dari platform / konfigurasi saat ini.
------ Edit Evolusi kecil berdasarkan jawaban Shaman di bawah (bagikan suara dan beri dia juga)
<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
---- Edit lagi dengan bagian-bagian dari xDisruptor tetapi saya menghapus penghapusan .vs karena ini akan lebih baik disajikan dalam .gitignore (atau yang setara)
Diperbarui untuk VS 2015.
<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> </Target>
Dia juga memberikan saran yang bagus untuk membuat tugas lebih mudah diterapkan dan dipelihara jika Anda memiliki banyak proyek untuk diterapkan.
Jika Anda memilih jawaban ini, pastikan untuk memilih keduanya juga.
sumber
Jika Anda menggunakan git dan memiliki benar
.gitignore
dalam proyek Anda, Anda bisauntuk benar-benar menghapus setiap file dalam
.gitignore
daftar, yaitu akan membersihkanobj
, danbin
folder (x
memicu perilaku ini)sumber
--dry-run
, ini hanya akan memberi tahu Anda apa yang akan dihapus. bagusUntuk Visual Studio 2015 variabel MSBuild telah berubah sedikit:
<Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs --> <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> </Target>
Perhatikan bahwa cuplikan ini juga menghapus folder .vs dari direktori root solusi Anda. Anda mungkin ingin mengomentari baris terkait jika Anda merasa bahwa menghapus folder .vs berlebihan. Saya mengaktifkannya karena saya perhatikan bahwa di beberapa proyek pihak ketiga itu menyebabkan masalah ketika file ala application.config ada di dalam folder .vs.
Tambahan:
Jika Anda ingin mengoptimalkan pemeliharaan solusi Anda, Anda mungkin ingin mengambil satu langkah lebih jauh dan menempatkan cuplikan di atas ke dalam file terpisah seperti:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Target Name="SpicNSpan" AfterTargets="Clean"> <!-- common vars https://msdn.microsoft.com/en-us/library/c02as0cs.aspx?f=255&MSPPError=-2147217396 --> <RemoveDir Directories="$(TargetDir)" /> <!-- bin --> <RemoveDir Directories="$(SolutionDir).vs" /> <!-- .vs --> <RemoveDir Directories="$(ProjectDir)$(BaseIntermediateOutputPath)" /> <!-- obj --> </Target> </Project>
Dan kemudian sertakan file ini di bagian paling akhir dari setiap file * .csproj Anda seperti:
[...] <Import Project="..\..\Tools\ExtraCleanup.targets"/> </Project>
Dengan cara ini Anda dapat memperkaya atau menyempurnakan logika pembersihan ekstra Anda secara terpusat, di satu tempat tanpa melalui kesulitan mengedit secara manual setiap file * .csproj secara manual setiap kali Anda ingin melakukan peningkatan.
sumber
Untuk menghapus bin dan obj sebelum membangun tambahkan ke file proyek:
<Target Name="BeforeBuild"> <!-- Remove obj folder --> <RemoveDir Directories="$(BaseIntermediateOutputPath)" /> <!-- Remove bin folder --> <RemoveDir Directories="$(BaseOutputPath)" /> </Target>
Berikut adalah artikelnya: Bagaimana cara menghapus folder bin dan / atau obj sebelum membangun atau menyebarkan
sumber
Situs ini: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ menggunakan perintah PowerShell William Kempf untuk menghapus folder bin dan obj dari direktori saat ini dan sub direktori. Seharusnya mungkin untuk menjalankannya dari root drive.
Ini adalah versi William
Dalam kata-kata William sendiri:
sumber
Lihat Ron Jacobs CleanProject open source yang fantastis. Ia bahkan menangani ritsleting jika Anda mau.
Ini adalah tautan CodePlex
sumber
Anda dapat dengan mudah menemukan dan menghapus folder bin dan obj di Manajer Jauh.
Dalam dialog pengaturan pencarian:
Setelah pencarian selesai, alihkan tampilan ke "Panel" .
Semoga bisa membantu seseorang.
sumber
Berdasarkan jawaban Joe, saya telah mengubah kode VB menjadi C #:
/// <summary> /// Based on code of VSProjCleaner tool (C) 2005 Francesco Balena, Code Archirects /// </summary> static class VisualStudioCleaner { public static void Process(string rootDir) { // Read all the folder names in the specified directory tree string[] dirNames = Directory.GetDirectories(rootDir, "*.*", SearchOption.AllDirectories); List<string> errorsList = new List<string>(); // delete any .suo and csproj.user file foreach (string dir in dirNames) { var files = new List<string>(); files.AddRange(Directory.GetFiles(dir, "*.suo")); files.AddRange(Directory.GetFiles(dir, "*.user")); foreach (string fileName in files) { try { Console.Write("Deleting {0} ...", fileName); File.Delete(fileName); Console.WriteLine("DONE"); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine(" ERROR: {0}", ex.Message); errorsList.Add(fileName + ": " + ex.Message); } } } // Delete all the BIN and OBJ subdirectories foreach (string dir in dirNames) { string dirName = Path.GetFileName(dir).ToLower(); if (dirName == "bin" || dirName == "obj") { try { Console.Write("Deleting {0} ...", dir); Directory.Delete(dir, true); Console.WriteLine("DONE"); } catch (Exception ex) { Console.WriteLine(); Console.WriteLine(" ERROR: {0}", ex.Message); errorsList.Add(dir + ": " + ex.Message); } } } Console.WriteLine(new string('-', 60)); if (errorsList.Count == 0) { Console.WriteLine("All directories and files were removed successfully"); } else { Console.WriteLine("{0} directories or directories couldn't be removed", errorsList.Count); Console.WriteLine(new string('-', 60)); foreach (string msg in errorsList) { Console.WriteLine(msg); } } } }
sumber
Di windows cukup buka explorer arahkan ke folder SLN Anda klik ke bidang pencarian dan ketik jenis: = folder; obj -> untuk folder obj gunakan CTRL + A dan hapus em - sama untuk bin Selesai
Tidak perlu alat atau perangkat lunak tambahan apa pun;)
sumber
Itu tidak menghapus folder, tetapi menghapus produk sampingan build. Apakah ada alasan Anda ingin folder build yang sebenarnya dihapus?
sumber
Bersihkan akan menghapus semua file menengah dan final yang dibuat oleh proses build, seperti file .obj dan file .exe atau .dll.
Namun, itu tidak menghapus direktori tempat file-file itu dibangun. Saya tidak melihat alasan kuat mengapa Anda perlu menghapus direktori. Bisakah Anda menjelaskan lebih lanjut?
Jika Anda melihat ke dalam direktori ini sebelum dan sesudah "Bersihkan", Anda akan melihat keluaran terkompilasi Anda dibersihkan.
sumber
Saya belum bisa menambahkan komentar (reputasi minimal belum tercapai)
jadi saya tinggalkan balasan ini untuk menggarisbawahi bahwa:
tindakan "BeforeBuild" dengan
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
sangat bagus, tetapi bagi saya, bertentangan dengan model Kerangka Kerja Entitas yang disertakan ke dalam proyek yang sama.Kesalahan yang saya terima adalah:
Saya kira, "edmxResourcesToembed" dibuat sebelum tindakan target "BeforeBuild" dijalankan.
sumber
Saya menggunakan VisualStudioClean yang mudah dimengerti dan diprediksi. Mengetahui cara kerjanya dan file apa yang akan dihapusnya membuatku lega.
Sebelumnya saya mencoba VSClean (catatan VisualStudioClean bukan VSClean), VSClean lebih canggih, memiliki banyak konfigurasi yang terkadang membuat saya bertanya-tanya file apa yang akan dihapus? Satu kesalahan konfigurasi akan mengakibatkan kode sumber saya hilang. Menguji bagaimana konfigurasi akan bekerja perlu mencadangkan semua proyek saya yang memakan banyak waktu, jadi pada akhirnya saya memilih VisualStudioClean.
Kesimpulan: VisualStudioClean jika Anda menginginkan pembersihan dasar, VSClean untuk skenario yang lebih kompleks.
sumber
Ini adalah bagaimana saya melakukannya dengan file batch untuk menghapus semua folder BIN dan OBJ secara rekursif.
@echo off @echo Deleting all BIN and OBJ folders... for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d" @echo BIN and OBJ folders successfully deleted :) Close the window. pause > nul
sumber
Saya menyimpan proyek VS saya yang sudah selesai dengan hanya menyimpan kode sumber.
Saya menghapus folder BIN, DEBUG, RELEASE, OBJ, ARM dan .vs dari semua proyek.
Ini sangat mengurangi ukuran proyek. Proyek
harus dibangun kembali saat ditarik dari penyimpanan.
sumber
Hanya tambahan untuk semua jawaban bagus di atas jika seseorang tidak menyadari betapa mudahnya di VB / C # untuk mengotomatiskan seluruh proses ke arsip zip.
Jadi, Anda hanya perlu mengambil aplikasi Formulir sederhana dari templat (jika Anda belum memiliki aplikasi tata graha) dan menambahkan tombol ke sana, lalu ClickOnce menginstalnya ke desktop Anda tanpa mengkhawatirkan pengaturan khusus atau banyak hal lainnya. Ini semua kode yang perlu Anda lampirkan ke tombol:
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 'You don't want Visual Studio holding a lock on anything while you're deleting folders 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
Satu hal yang perlu diingat adalah bahwa penghapusan sistem file bisa salah dengan mudah. Salah satu favorit saya adalah ketika saya menyadari bahwa saya tidak dapat menghapus folder karena berisi item yang dibuat oleh Visual Studio saat berjalan dengan hak istimewa yang ditinggikan (sehingga saya dapat men-debug layanan).
Saya perlu memberikan izin secara manual atau, saya kira, menjalankan aplikasi dengan hak istimewa yang lebih tinggi juga. Either way, saya pikir ada beberapa nilai dalam menggunakan pendekatan berbasis GUI interaktif atas skrip, terutama karena ini kemungkinan adalah sesuatu yang dilakukan pada akhir hari yang panjang dan Anda tidak ingin mengetahui nanti bahwa cadangan Anda sebenarnya tidak ada ...
sumber
Pembaruan: Visual Studio 2019 (Bersihkan [bin] dan [obj] sebelum rilis). Namun saya tidak yakin apakah [obj] perlu dihapus. Ketahuilah bahwa ada konfigurasi paket nuget yang ditempatkan juga. Anda dapat menghapus baris kedua jika menurut Anda demikian.
<Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="'$(Configuration)' == 'Release'"> <!--remove bin--> <Exec Command="rd /s /q "$(ProjectDir)$(BaseOutputPath)" && ^" /> <!--remove obj--> <Exec Command="rd /s /q "$(BaseIntermediateOutputPath)Release"" /> </Target>
sumber
jawaban ini bagus. Saya hanya ingin mengomentari bagian terakhir dari jawaban
Atau, Anda dapat menambahkan berikut ini ke profile.ps1 Anda
Kemudian Anda dapat menggunakan CleanSolution atau cs untuk menjalankan. Dengan cara itu Anda dapat menggunakannya untuk proyek apa pun dan tanpa awalan ./ dari nama file
sumber
Ekstensi Visual Studio
Solusi Klik Kanan - Pilih "Hapus folder bin dan obj"
sumber