I was trying to debug a dotnet publish
operation on an ASP.NET Core project recently and becoming irrational after staring at MSBuild log files for too long. MSBuild does all the heavy lifting in dotnet publish
and build
operations. That’s when I discovered the MSBuild Structured Log Viewer from Kirill Osenkov. You can install the viewer from http://msbuildlog.com/.
In the end I was fighting a battle over $(DefaultItemExcludes)
during publish and trying to find the right target to override and "fix" the property. Even the simplest builds are complicated these days, with implicit imports for .prop
files, hundreds of properties, and dozens of tasks. Trying to figure the order of execution by looking at individual .csproj
and .targets
files is impossible.
MSBuildLog provides a tree view of all the targets that are executing, and provides the properties and items in effect for each step. The search feature is excellent and usually the best way to navigate into the tree, if you have an idea of what you are looking for.
The tool also provides a list of the slowest build tasks, which these days always has Exec
tasks calling out to Node or npm at the top of the list.