PS for .NET devs part 3: List Targets in your MSBuild file
The project I'm currently working on, started more than five years ago
and has quite a large MSBuild file to perform all the build
automation for the project. A while back I found myself struggling to
remember the name of a specific build
Target that I don't use
very often. Since such a large XML file is not as readable as one
would hope I couldn't find what I was looking for fast enough. Since I
know PowerShell has good XML support I opened the
PowerShell Integrated Scripting environment and experimented a
bit to see how hard it would be to list all the
the MSBuild file using PowerShell.
What's so great about PowerShell's XML support? No fiddling
around with namespaces, the element tree can be walked using the
(aka the property dereferencing operator). So to get all
Target elements from the MSBuild file you can use:
Get-Member you see that the
Target objects have a
One obvious thing to try would be
But that gives no output, this is caused by the fact that
Name is an
Select-Object however works perfectly.
The total script becomes:
This could be put on 1 line to uphold the slogan, "Automating the world one-liner at a time..." but I find this to be a little more readable.
This script took me 5 minutes to write and has already payed itself back dozens of times when I need to find the name of the target that I wish to run. That's all for now, next time will take a look at how you can get an overview of your code-base using a few simple PowerShell commands.