Sometimes you want to build only a single project, or a list of projects from a solution without building the whole solution with MSBuild.
To do so, you can use custom build targets. You need to add a custom build target for every project you want to build containing the relative path in solution structure of the project (.csproj/.vproj). Another thing you need to have in mind is that the dots(.) in the project name should be replaced with underscores(_). You can clean or rebuild adding :Clean, :Rebuild at the end of the target.
However if you can check all the MSBuild targets used from the solution. As you may know, when running MSBuild command against a solution file in-memory, it is converted to an actual MSBuild project named [SolutionName].sln.metaproj. You can add an environment variable named msbuildemitsolution
and set its value to 1
and run MSBuild from command line. Another option is to add /p:msbuildemitsolution=1
to the passed parameters to the build. This will generate the .metaproj file where you can find all the needed targets.
Let's illustrate all the above with a simple example. Here is a simple project structure:
If we want to build Project.Four
and rebuild ProjectTwo
, we need to call MSBuild
with the following arguments:
msbuild BuildSpecificProjectsFromASolution.sln /t:"Folder2\Project_Four";"ProjectTwo:Rebuild"
You can find the sample solution here.