As .NET becomes more common cross-platform, a new generation of tools is emerging to help developers manage common workflows when using the same .NET code across multiple operating systems, runtimes and devices. Protobuild is one of these awesome emerging new tools and I've very proud to welcome them into the .NET Foundation. 

In this guest post, June Rhodes from the Protobuild project team explains more about the project. If it looks like it will be useful to you, I encourage you to give it a try and get involved in the growing community.

-- Martin

Do you develop cross-platform .NET projects? Maybe you manage them with multiple C# projects on disk for each platform or framework you want to target? Or maybe you use MSBuild conditionals to target multiple platforms and fore-go the use of Linux or Mac IDEs for .NET?

I had used both techniques before I developed Protobuild; a cross-platform project generator for C#. With my solutions often having 10 or more assemblies, manually keeping a Windows, Linux and Mac version of every project in sync as well as managing the references was difficult. As someone who frequently works on Linux, selecting the MSBuild option and foregoing the use of MonoDevelop wasn't an option either - I needed the ability to debug the software I was developing on all platforms.

I searched around for project generators at that point, but there weren't any particular good C# options. In addition I found that most of the project generators were one-way; if you wanted to add a file to your solution, you needed to open the cross-platform project definitions and add the file there. I wanted less overhead managing projects, so Protobuild supports two-way generation; when you add or remove files in your IDE, these changes get synchronised back to the cross-platform project definitions.

Over time Protobuild evolved to support more platforms; it now supports Windows, Linux, Mac (MonoMac, XamMac and Xamarin.Mac), iOS, tvOS, Android, Ouya, PCL (for bait-and-switch), Windows 8 Apps, Windows Phone 8, Windows Phone 8.1, Web (via JSIL) and most recently Universal Windows Apps - and you can target all of these platforms for your project just by selecting a drop-down

dimag Logo

These days, Protobuild is used by cross-platform projects like MonoGame to manage their projects and dependencies. It's capable of cross-platform package management, and provides an automation layer for build server scripts.

If you're managing cross-platform .NET projects, and you'd like to try out or use Protobuild for your own projects, you can download it from the Protobuild website.

June Rhodes, Project Lead, Protobuild


The WiX toolset project holds a special place in my heart. I've built many installers in my time using the toolset and had nothing but positive interactions with the community as a developer, but also the WiX toolset was one of the very first open source projects that came out of Microsoft. Rob and his team blazed a trail that we where then able to follow with .NET and so many other open source projects afterwards. That is why I'm especially thrilled that now I get to work more with the project as they have decided to make the .NET Foundation their home.

For those few people who have been under a rock for the past decade and didn't know about it, the WiX toolset lets developers create installers for Windows Installer, the Windows installation engine used by many traditional desktop applications and also Windows Server installation mechanisms. The core of WiX is a set of build tools that build Windows Installer packages using the same build concepts as the rest of your product: source code is compiled and then linked to create executables; in this case .exe setup bundles, .msi installation packages, .msm merge modules, and .msp patches. The WiX command-line build tools work with any automated build system. Also, MSBuild is supported from the command line, there is an excellent Visual Studio integration along with links into Team Build / VSTS.

WiX includes several extensions that offer functionality beyond that of Windows Installer. For example, WiX can install IIS web sites, create SQL Server databases, and register exceptions in the Windows Firewall, among others. It's used by every single .NET development shop I know.

With Burn, the WiX bootstrapper, you can create setup bundles that install prerequisites like the .NET Framework making it easier for end users to run your .NET based applications. You can also use it to create installers for applications created using other runtimes. I once quickly knocked up an installer using the WiX toolset that installed Java + Eclipse + Team Explorer Everywhere along with demo projects, test data and demo scripts just to make my demos quicker to get set up back when I was looking after the Eclipse tooling in Microsoft. Burn also lets you download packages or combine them into a single downloadable .exe.

The WiX SDK includes managed and native libraries that make it easier to write code that works with Windows Installer, including custom actions in both C# and C++.  If you haven't tried it yet then what are you waiting for - give it a go now.  If there is any functionality that you want to add then get involved with the amazing community and contribute.

May the 4th be with you. Always.

Martin Woodward
Executive Director.