Improving how we build projects and solutions
The problem with Solutions
If you’re working with just one solution and the projects it contains Microsoft Visual Studio is a good tool for managing the builds. Except that it won’t necessarily build the projects in the right order, forcing you to make multiple build passes to get a built solution.
But what if you’re working with many solutions?
What if some of the projects in the solutions have identical project names, even though they are different projects? You can’t merge these into one mega solution so that you can build everything at once because the project names will clash.
Another problem with solutions is that the projects in the solution do not necessarily get built in the optimum order. A project that depends on another project may be built before that project dependency is satisfied. This forces you to build the solution multiple times until all dependencies are satisfied.
What if there was a better way to manage your builds? What if there was a better way to automate your builds?
Born from a real need
At Software Verify we have a code base of several million lines of C++, plus some C, assembler and C#. Looking at the Visual Studio Project Builder display I can see we have 28 solutions, with 217 projects, giving us a total of 962 different project configurations to complete a build. (The actual number is higher than this because it doesn’t include the legacy support solution and projects for Visual Studio 2002, because that can’t be installed on a 64 bit machine.).
This large number of projects and solutions includes every version of Visual Studio from Visual Studio 2017 to Visual Studio 6.
We needed to have a build tool that would allow us to reliably build a project, or solution, or a specific configuration of a project, regardless of version of Visual Studio or programming language.
All this would be done with one simple to use software tool that could be used interactively with a GUI or from the command line. The tool would provide visual feedback so that you could tell from 50 feet if the build was going pear shaped. The tool would also provide notifications so that you could forget about it and go do something else instead.
Visual Studio Project Builder
I’ve seen various solutions to this problem, lots of scripts, batch files, programs interacting. It works, kind of, but it’s all a bit of a mess, held together with string and duct tape in the best “make it work” seat of the pants “we haven’t got enough time” developer fashion.
That isn’t what I wanted. We’d already finished Visual Studio Project Fixer and I was very pleased with the results from that. I wanted the same “one tool” approach. We had the requirements, we knew what we needed to be able to build. We knew we had a decent test case (build our own tools) and we knew what a good tool would look like. As simple as possible.
That’s how Visual Studio Project Builder was born.
The basic capabilities are:
- Automatically discover solutions and projects.
- Optimise the build order.
- Build, rebuild, clean project for any Visual Studio version from 2017 to 6.
- Build individual project configurations, or variations based on project, solution and configuration.
- Easily identify warnings and errors.
- Easily filter warnings and errors.
- Interactive GUI with real time build progress updating.
- Can be run from a command line if desired.
- Works on any Windows OS from Windows 10 through Windows XP.
A simple user interface
When performing a full build, full rebuild or full clean, a progress dialog is displayed, allowing the progress of the build to assessed at a glance, but with extra detail if you want it. You can tell from the colours on this dialog if a build is good, or bad, or has warnings, from 50 feet.
Behind the progress dialog is the main display, showing the status of every project configuration that can be built. Colours indicate status (good, warning, compiler error, linker error). A context menu provides access to options related to that project configuration, project or solution. For example:
- Build all projects named “stubNonMFC” that have the configuration “Win32|Debug”.
- Rebuild all projects that have the configuration “Win32|Release”.
- Rebuild all projects in this solution that have the configuration “Win32|Release”.
- Clean all projects named “tabserv”.
- View build logfile.
- View build command line passed to Visual Studio.
Some of the build options from the context menu cannot be done with Visual Studio, except by manual intervention for each project. When you span this across many solutions and projects this becomes very powerful and an incredible time saver.
Software developers perform a mentally taxing job. The last thing you want to add to their list is “Is the build done yet?”. To remedy this problem we have provided several (optional) notification methods:
- Email when build is complete.
- Text message when build is complete. Uses Twilio.
- Speech message when build is complete.
My favourite is the last one. I can go and do something else, read a book, investigate a bug, work on something else, talk to someone, and when the build is done my computer talks to me: “Build Complete, Success”, or “Build Failure. 3 Errors”.
The email and text message notifications are intended for use when you are out of range of the computer talking to you.
We have delayed implementing carrier pigeon functionality until there is a proven market for it.
Does this compete with existing build solutions?
Does this compete with existing build solutions such as IncrediBuild?
No. Incredibuild speeds up builds of projects and solutions by distributing them on your local network.
Visual Studio Project Builder is all about getting projects built, in the right order, even though many toolsets may be in use. It all happens on the same machine. We’re hoping that Visual Studio Project Builder can work with build accelerators like IncrediBuild to speed things up.
Build your Visual Studio Projects
We’ve been using Visual Studio Project Builder in house for some time. We thought it was about time everyone else got a chance to use it. We’re making this available for free. Learn more about Visual Studio Project Builder.