I thought I’d blog this as it took me a frustratingly long time to work out how to do it (I’m new to MSBuild scripts – I usually do my builds with nant).
I wanted to simply clean my solution before the build. The solutions I found on Stack Overflow were unsatisfactory. For example, I didn’t want to have to name the folders that I wanted to delete files from.
So, here’s what I did; I simply called the “Clean” MSBuild target for all csproj files found below the directory the build was initiated from:
<?xml version="1.0" encoding="utf-8" ?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build-and-test"> <Target Name="Build-and-test"> <CallTarget Targets="clean-all-folders"/> <CallTarget Targets="build"/> <CallTarget Targets="unit-tests"/> </Target> <ItemGroup> <ProjectFiles Include="**\*.csproj" /> </ItemGroup> <Target Name="clean-all-folders"> <MSBuild Projects="@(ProjectFiles)" targets="Clean" /> </Target> etc. </Project>
This doesn’t delete the bin, debug and obj folders – but I don’t believe that is a problem.
The above script is generic – it doesn’t care what the project files or solution are called.
You can eliminate the ItemGroup if you are willing to hard code your solution file:
<Target Name="clean-all-folders"> <MSBuild Projects="MySolition.sln" targets="Clean" /> </Target><