If you right click on a folder, you will see a "Clean" menu item. I assumed this would clean (remove) the obj and bin directory. However, as far as I can see, it does nothing. Is there another way? (please don't tell me to go to Windows Explorer or the cmd.exe) I'd like to remove the obj and bin folder so that I can easily zip the whole thing.
-
2Possible duplicate of [I want to delete all bin and obj folders to force all projects to rebuild everything](https://stackoverflow.com/questions/755382/i-want-to-delete-all-bin-and-obj-folders-to-force-all-projects-to-rebuild-everyt) – Michael Freidgeim Jul 23 '17 at 06:35
-
If built by CMake (CMakeLists.txt) then there can also be a 'CMakeSettings.json' file. This was, for me, one level up from the `vcpkg` install sub-dir. That file wasn't part of the project's .gitignore so was confusing for Ruben's `git clean ...` method. – Philip Oakley Apr 23 '21 at 20:56
22 Answers
As others have responded already Clean will remove all artifacts that are generated by the build. But it will leave behind everything else.
If you have some customizations in your MSBuild project this could spell trouble and leave behind stuff you would think it should have deleted.
You can circumvent this problem with a simple change to your .*proj by adding this somewhere near the end :
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
Which will remove everything in your bin folder of the current platform/configuration.
------ Edit Slight evolution based on Shaman's answer below (share the votes and give him some too)
<Target Name="SpicNSpan" AfterTargets="Clean">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
---- Edit again with parts from xDisruptor but I removed the .vs deletion as this would be better served in a .gitignore (or equivalent)
Updated for 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>
He also provides a good suggestion on making the task easier to deploy and maintain if you have multiple projects to push this into.
If you vote this answer be sure to vote them both as well.

- 5,793
- 1
- 33
- 45

- 7,543
- 4
- 48
- 71
-
23This is the best solution, works, doesn't require special tools and makes sure every teammember uses the same "clean" method. Why MS Visual Studio doesn't clean properly is a complete mystery to me. – Rolf Jan 03 '13 at 15:11
-
1This is by far the easiest solution to implement and gets the job done without any external plugins – tomoguisuru Aug 15 '13 at 20:02
-
1Not sure how to activate/call this target. Just choosing 'Clean' does not appear to do anything. So how do I use it? – aliceraunsbaek Jan 27 '14 at 13:28
-
sorry just now saw your comment. Specifying AfterTargets="Clean" will hook the target to the internal clean target for VisualStudio. However this simple target does not provide any feedbaco to the console so it will not do much other than wiping out your $(OUTDIR) from existence. You can add some error management and messages to it and get some better feedback. – Newtopian Jul 30 '14 at 15:42
-
I tried this in VS 2013 and it actually added folders to \bin & \obj. Caveat: my .csproj imports a few external .csproj files with build configurations - there are 26 builds, each of which goes in a subfolder under \obj / \bin (I can explain!). – CAD bloke Aug 03 '14 at 22:01
-
Mystery to me how RemoveDirectory can add directory ! I would think it probably a side effect of something else in your MSbuild tasks, perhaps the folders are created automatically after a clean has been called – Newtopian Aug 04 '14 at 16:24
-
We had a phantom orphaned assembly, adding this to the end of our .csproj did exactly what the OP suggested and it fixed our issue. Love how clean the solution is! – Randy P. Jul 24 '15 at 19:30
-
In Microsoft Visual Studio Community 2017 v15.3.4 (run as Administrator), removing folder ".vs" gives error, "Unable to remove directory "{SOLUTIONDIR}\.vs". The process cannot access the file 'storage.ide' because it is being used by another process." I can remove after exiting Visual Studio, but it re-appears after restart. I've commented out that line, as it's not needed for my use case. – iokevins Sep 15 '17 at 22:55
-
yeah, I would not recommend deleting the IDE's working folder during execution. As I've stated in the answer this should probably be handled with an entry in a gitignore file (or whatever equivalent for your SCM of choice) – Newtopian Jan 22 '18 at 23:14
-
5@Rolf Visual Studio doesn't clean "properly" by default because MS has to support the use case where N different projects output to the same directory. If cleaning a project clobbered its entire output directory by default, it could clobber files entirely unrelated to that project. So instead the default behavior is to keep track of files that are actually output by the build process and delete only those files on clean. A common class of breakage at clean time is caused by creating or copying a file during the build without telling MSBuild to add it to the tracking list. – Tim Sparkles Jan 03 '20 at 22:00
-
1This answer as it is causes problems with .Net Core. The next time you try and compile you'll get the error "Assets file 'c:\whatever\project.assets.json' not found. Run a NuGet package restore to generate this file.". To avoid this, *don't* add the line to remove the obj folder. – Steve Smith Mar 12 '20 at 12:22
-
@Rolf simply not scalable, not stable, not easily verifiable. Devs would forget to do this all the time and your project files checking by hand a few hundred files? Insanity. Really needs a proper fix. – Shiv Apr 21 '21 at 05:12
-
The Updated for VS 2015
even works in SharpDevelop. Thank you so much! – hubert17 Jul 07 '23 at 23:15
If you are using git and have a correct .gitignore
in your project, you can
git clean -xdf --dry-run
to remove absolutely every file on the .gitignore
list, i.e. it will clean obj
, and bin
folders (the x
triggers this behavior)
Note: The parameter --dry-run
will only simulate the operation ("Would remove ...") and show you what git would delete. Try it with dry-run, then remove the parameter and it will really delete the files+folders.
Optionally, after that clean command, you can use dotnet restore mySolution.sln
to get all the NUGET packages restored. And if you have a developer console open anyway,
you can quickly run msbuild -m mySolution.sln
afterwards (without having Visual Studio open) to see if it was successful.

- 25,467
- 18
- 120
- 187

- 59,778
- 26
- 187
- 249
-
4This works beautifully. Very convenient when you want to do solution wide instead of just one Visual Studio project – Ehtesh Choudhury Feb 09 '17 at 00:35
-
@JoeHealy In stead of cleaning first and then zipping, it might be easier to [use git-archive](https://stackoverflow.com/a/163769) to zip directly from the repo. – Reinier Torenbeek Feb 18 '18 at 18:57
-
Works like a charm! This is the best answer. Also if, let's say the project is not using source control, this answer still aplies: just add the project to source control (right click on solution name), then run the git command above. Btw, how do you use git commands in Windows? I had to use Bash on Ubuntu on Windows. – brett Apr 22 '18 at 19:32
-
@brett Interesting ;) I typically use GitHub for Windows to pave (though I'm pretty sure VS installs a working rig that can be used from VS command prompt) - the settings lets you select a shell arrangement (from which I choose PoshGit). Using WSL is the most educational, so good call! – Ruben Bartelink Apr 22 '18 at 22:38
-
as I understand `-xdf` and `-d -f -x` means the same thing but I only got successfull result with `git clean -d -f -x` command. When I use `-xdf` it only says `Would remove \somedirectory`. Can anyone explain it? – mkb Dec 02 '18 at 02:36
-
3ok. now I see; the key is `--dry-run`, this will only tells you what's gonna be deleted. nice – mkb Dec 02 '18 at 02:46
-
@mbk correct ;) ... a less cryptic writeup I saw recently: https://www.jerriepelser.com/blog/cleaning-visual-studio-project-output-using-git-clean/ – Ruben Bartelink Dec 02 '18 at 18:14
-
For me, this answer only cleaned the files within an ignored directory and did not recursively clean sub directories within an ignore. Like it cleaned bin files but not bin/Debug/* – crokusek Oct 08 '19 at 02:06
-
@crokusek that suggests that your `.gitignore` is inconsistent in some way - the `git clean` is pretty predictable and GIGO – Ruben Bartelink Oct 08 '19 at 14:33
-
@crokusek you could make a copy of the project directory somewhere, delete all .git files, including .gitignore in the new directory and open the cloned project with Visual Studio. With right click on solution name add the project to source control. This will generate correct .gitignore file. You will then be able to run the command on this repository and clean up the extra files not really necessary for archiving the project. – brett Jan 10 '20 at 22:35
-
2This will remove everything including the .vs folder, .suo file, packages folder etc. Typically you dont want that. I only want `bin` and `obj` to go away – nawfal Sep 08 '22 at 06:51
For Visual Studio 2015 the MSBuild variables have changed a bit:
<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>
Notice that this snippet also wipes out the .vs folder from the root directory of your solution. You may want to comment out the associated line if you feel that removing the .vs folder is an overkill. I have it enabled because I noticed that in some third party projects it causes issues when files ala application.config exist inside the .vs folder.
Addendum:
If you are into optimizing the maintainability of your solutions you might want to take things one step further and place the above snippet into a separate file like so:
<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>
And then include this file at the very end of each and every one of your *.csproj files like so:
[...]
<Import Project="..\..\Tools\ExtraCleanup.targets"/>
</Project>
This way you can enrich or fine-tune your extra-cleanup-logic centrally, in one place without going through the pains of manually editing each and every *.csproj file by hand every time you want to make an improvement.

- 5,793
- 1
- 33
- 45

- 3,786
- 2
- 36
- 56
-
Is there any nice way to delete all files in a folder except from one specific one? – progLearner Mar 03 '20 at 14:45
-
1@progLearner ofcourse there is https://stackoverflow.com/a/10019708/863651 – XDS Mar 03 '20 at 21:19
-
Also, I noticed there are sometimes some file locks on some dll from the bin directory. Is there a way to force file deletion? – progLearner Mar 04 '20 at 12:37
-
1@progLearner it's a tricky question to answer properly. Some files appear to be locked yet if we persist 2 or 3 times then they do get deleted. Then there are cases where files are truly locked indeed and then you are out of luck because you can't delete them unless and until you kill the processes locking them. If you are in scenario #1 then you can try the delete-directory action from the latest MSBuildCommunityTasks which does have a persist-delete flag (you can read the docs on this one because it's outside the scope of this particular thread) – XDS Mar 04 '20 at 12:41
-
Thanks, I am out of luck then. The problem is comming from a package dll (Newtonsoft.Json.dll) that sometimes cannot be deleted. Restarting VS fixes the problem, but it is a real pain. – progLearner Mar 04 '20 at 12:46
-
1I had a similar problem. There is a process running in the background called VSCompiler.exe or something to that effect. You can try killing this process first before you delete the directory and see if it works (I think it will). Good luck mate! – XDS Mar 04 '20 at 12:55
-
Actually, did you manage to kill this process from within your .csproj? It would be great if you could share how you did that. Not sure how to do it in an automated way. Ideally, I would make sure to kill it prior to doing a Clean. Cheers – progLearner Mar 04 '20 at 16:14
-
Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/209027/discussion-between-xds-and-proglearner). – XDS Mar 04 '20 at 21:32
-
Is there some way to get this included automatically into all CSPROJ files referred to within an entire solution? There is the `before.solution.sln.targets` file but its not clear to me how that might help... – StayOnTarget Jun 02 '20 at 20:04
-
@UuDdLrLrSs none that I know of. If you ever come across feel free to point it out. – XDS Jun 03 '20 at 17:22
-
1While this is correct, it seems to break NuGet until you reload the project. – HackSlash Mar 16 '23 at 16:37
-
1Another great advantage of importing the snippet is that you can modify ExtraCleanup.targets *after* the projects have been loaded. Useful when you are testing your snippet. – Ama May 13 '23 at 12:04
To delete bin and obj before build add to project file:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
Here is article: How to remove bin and/or obj folder before the build or deploy

- 5,793
- 1
- 33
- 45

- 3,576
- 3
- 23
- 18
-
4I like the idea of removing the intermediaries as well, however there are significant side effects to hooking at BeforeBuild as it will wipe all possibilities to perform incremental builds. In projects that take significant amount of time to build this is a show stopper. Also by wiping out the base output dir you may interfere with tools that may want to perform multi-target/configuration builds and cumulate the results prior to packaging it for deployment, here only the last build performed will survive. – Newtopian Jul 30 '14 at 15:47
This site: https://sachabarbs.wordpress.com/2014/10/24/powershell-to-clean-visual-studio-binobj-folders/ uses William Kempf's powershell commands to remove any bin and obj folders from the current directory and sub directories. It should be possible to run it from the root of the drive.
Here is William's version
gci -inc bin,obj -rec | rm -rec -force
In William's own words:
That wipes out all of the “bin” and “obj” directories in the current directory and every subdirectory. Super useful to run in your workspace directory to get to a “clean” state, especially when someone messes up and there’s something that a Clean or Rebuild inside the IDE doesn’t catch.
For those of you reading that may not know, PowerShell supports command aliases, here it is rewritten again not using the aliases
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
NOTE : You should have this stored in a PowerShell file and place that file at the root of your solution (where the .sln file resides), and then run it when you want a proper clean (not the micky mouse one that VisualStudio does, and reports success too).

- 11,743
- 10
- 52
- 81

- 23,555
- 29
- 141
- 228
-
Be aware that if you use a version control system like mercurial and it is in the same directory level as this script, this script will corrupt your repository if you store anything on it inside a "bin" folder ... otherwise this is a very useful script! – Loudenvier Jun 21 '18 at 17:35
Check out Ron Jacobs fantastic open source CleanProject It even takes care of the zipping if you like.
Here is the CodePlex link

- 5,106
- 2
- 23
- 18

- 835
- 10
- 15
-
There is a different extension for VS2022 now: "Clean Bin and Obj" https://marketplace.visualstudio.com/items?itemName=dobrynin.cleanbinandobj – Alexander Puchkov Dec 22 '22 at 16:50
You can easily find and remove bin and obj folders in Far Manager.
- Navigate to you solution and press Alt+F7
In search setting dialog:
- Type "bin,obj" in field "A file mask or several file masks"
- Check option "Search for folders"
- Press Enter
After the search is done, switch view to "Panel".
- Select all files (with Ctrl+A) and delete folders (press "Shift+Del")
Hope it helps someone.

- 1,555
- 1
- 26
- 33
-
3googled this question looking for automatic solution specifically to stop manually doing it in FAR Manager lol – Vlad Dec 06 '18 at 03:00
Based on Joe answer, I've converted the VB code into 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);
}
}
}
}

- 12,981
- 8
- 59
- 68

- 2,257
- 3
- 29
- 41
In windows just open the explorer navigate to your SLN folder click into search field and type kind:=folder;obj --> for obj folders use CTRL+A and delete 'em - same for bin Done
No need for any tool or extra software ;)

- 33
- 2
Clean will remove all intermediate and final files created by the build process, such as .obj files and .exe or .dll files.
It does not, however, remove the directories where those files get built. I don't see a compelling reason why you need the directories to be removed. Can you explain further?
If you look inside these directories before and after a "Clean", you should see your compiled output get cleaned up.

- 63,815
- 23
- 109
- 159
-
-
5
-
Just tried it with my Visual Studio 2005, and I can verify that "Clean" did remove the .exe (and all other files). – abelenky Jul 06 '09 at 19:07
-
4In Visual Studio 2010, maybe. Right now, I can confirm that a "Clean Solution" does not remove dlls from the Debug/bin folders. – Keith Hoffman Apr 16 '12 at 05:51
-
4Clean does not delete files if they are not computed by the build. If some files travel to the outdir by some other mecanism then clean will not delete them. In other words, when wearing build manager`s hat, clean is completely and utterly useless, dangerous even. – Newtopian Aug 30 '12 at 21:26
I use VisualStudioClean which is easy to understand and predictable. Knowing how it works and what files it is going to delete relieves me.
Previously I tried VSClean (note VisualStudioClean is not VSClean), VSClean is more advanced, it has many configurations that sometimes makes me wondering what files it is going to delete? One mis-configuration will result in lose of my source codes. Testing how the configuration will work need backing up all my projects which take a lot of times, so in the end I choose VisualStudioClean instead.
Conclusion : VisualStudioClean if you want basic cleaning, VSClean for more complex scenario.

- 21
- 1
I can't add a comment yet (no minimal reputation reached)
so I leave this reply to underline that:
the "BeforeBuild" action with <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
is great but, for me, is conflicting with an Entity Framework model included into the same project.
The error I receive is:
Error reading resource '{mymodel}.csdl' -- 'Could not find a part of the path '{myprojectpath}\obj\Release\edmxResourcesToEmbed\{mymodel}.csdl
I suppose, the "edmxResourcesToembed" is created before the "BeforeBuild" target action is executed.

- 1,118
- 11
- 22
This is how I do with a batch file to delete all BIN and OBJ folders recursively.
- Create an empty file and name it DeleteBinObjFolders.bat
- Copy-paste code the below code into the DeleteBinObjFolders.bat
- Move the DeleteBinObjFolders.bat file in the same folder with your solution (*.sln) file.
@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

- 8,884
- 1
- 49
- 55
For C# projects, I recommend appending $(Configuration) to obj folder, so-as to avoid deleting nuget files which are stored on obj base directory.
<Target Name="CleanAndDelete" AfterTargets="Clean">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)$(Configuration)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
If you delete the nuget files, it can be problematic to recreate them. Moreover, I've never seen a case where "Restore NuGet Packages" fixes this issue after these files have been deleted.

- 91
- 3
Update: Visual Studio 2019 (Clean [bin] and [obj] before release). However I am not sure if [obj] needs to be deleted. Be aware there is nuget package configuration placed too. You can remove the second line if you think so.
<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>

- 3,719
- 1
- 25
- 26
I store my finished VS projects by saving only source code.
I delete BIN, DEBUG, RELEASE, OBJ, ARM and .vs folders from all projects.
This reduces the size of the project considerably. The project
must be rebuilt when pulled out of storage.

- 1,281
- 17
- 20
Just an addendum to all the fine answers above in case someone doesn't realize how easy it is in VB/C# to automate the entire process down to the zip archive.
So you just grab a simple Forms app from the templates (if you don't already have a housekeeping app) and add a button to it and then ClickOnce install it to your desktop without worrying about special settings or much of anything. This is all the code you need to attach to the button:
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
One thing to remember is that file system deletes can go wrong easily. One of my favorites was when I realized that I couldn't delete a folder because it contained items created by Visual Studio while running with elevated privileges (so that I could debug a service).
I needed to manually give permission or, I suppose, run the app with elevated privileges also. Either way, I think there is some value in using an interactive GUI-based approach over a script, specially since this is likely something that is done at the end of a long day and you don't want to find out later that your backup doesn't actually exist...

- 12,981
- 8
- 59
- 68

- 603
- 1
- 7
- 13
this answer is great I just want to comment on the last part of the answer
NOTE : You should have this stored in a PowerShell file and place that file at the root of your solution (where the .sln file resides), and then run it when you want a proper clean (not the micky mouse one that VisualStudio does, and reports success too).
Alternatively, you can add the following to your profile.ps1
function CleanSolution {
Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force
}
Set-Alias cs CleanSolution
Then you can use either CleanSolution or cs to run. That way you can use it for any project and without the ./ prefix of the filename

- 2,061
- 1
- 17
- 26

- 21
- 1
- 9
Complete one-liner you can invoke from within Visual Studio
In your solution root folder create a file called "CleanBin.bat" and add the following one-liner:
Powershell.exe -ExecutionPolicy Bypass -NoExit -Command "Get-ChildItem -inc bin,obj -rec | Remove-Item -rec -force"
Run the .bat file. Enjoy.
Original creds to the answer here: https://stackoverflow.com/a/43267730/1402498 The original answer shows the powershell command, but I had a lot of trouble making it work smoothly on my system. I finally arrived at the one-liner above, which should work nicely for most folks.
Caveat: Microsoft seems to be great at making Windows security cause stranger and stranger behavior. On my machine, when I run the script, all obj and bin folders are deleted but then reappear 2 seconds later! Running the script a second time causes permanent deletion. If anyone knows what would cause this behavior, please let me know a fix and I'll update the answer.

- 2,999
- 3
- 32
- 50
for visual studio 2022 you can use: https://marketplace.visualstudio.com/items?itemName=MadsKristensen.CleanSolution

- 41
- 6
-
I wonder if this can be achieved by the extension, why don't MS fix it in VS in the first place? – Syed Sep 28 '22 at 09:52
If you need to delete bin and obj folders from ALL of your projects...
Launch git Bash and enter the following command:
find . -iname "bin" -o -iname "obj" | xargs rm -rf