What is Votive and where is it going? Well, first of all you should probably understand what WiX is. In a nutshell, WiX (Windows Installer XML) is an XML-based language for creating Windows Installer packages (.MSI files) that can install applications for the Windows platform. Votive is the Visual Studio package that lets you edit the WiX files using IntelliSense and all of the other niceties of Visual Studio. Rob Mensching, the founder of WiX and our benelovent dictator, has written a great tutorial of WiX using Votive in an MSDN article. I highly recommend it.
So far, Votive has been written using C# for the .NET Framework 1.1 targeting Visual Studio 2003. If any of you have ever developed custom packages for Visual Studio, you'll understand the immense number of COM interfaces that you have to implement to get basic functionality written. In fact, Votive has almost 30,000 lines of code the last time I checked and it does just rudimentary stuff. I haven't even gotten to the real meat of what I'd like to do with Votive. With the recent release of Visual Studio 2005 Beta 2 it seems that the number of bugs coming in about support for VS 2005 has risen. To be honest, I hadn't even installed it to ever test it out and it wasn't even my intention to support it. However, Bob Arnson, one of our WiX virtual team members, decided to test it out and discovered that most of the functionaly still worked. So, Bob added it to the Votive.msi setup.
I've known for a while about the new MPF (Managed Package Framework) classes that ship with Visual Studio 2005, but I hadn't used them because I didn't want to limit support to only Visual Studio 2005. However, I have been getting frustrated with how much manual bookkeeping code there is to implement all of the little things that a "first-class" package should support, such as cut-copy-paste support in the Solution Explorer, file/folder renaming, project serialization, etc. It seems that all of that should just be taken care of for me. To my great delight, the MPF does all of that stuff for me. It lets me concentrate on the real WiX-specific aspects. Last week I started moving all of the code over to the new MPF and was amazed at how much stuff I got for "free" that I hadn't even implemented in Votive 2003 yet.
So, I've decided that I will port all of the existing code over to the MPF framework and basically "throw away" the vast majority of existing code. It was a hard decision on one part because I've spent over a year on the existing code base. However, I get so much more by switching over that I'll actually be ahead of where I am now. Just to give you an idea, here is what currently works in Votive 2003:
The list of what doesn't work is longer than the list of what does work. Just in a couple of nights worth of work, here is what currently works in Votive 2005:
I will be working on Votive 2005 almost exclusively now and will no longer actively support Votive 2003. Of course, people in the community are more than welcome to continue working on Votive 2003 and submit code changes back. I'm interested to hear what people think about this.
My next blog entries will probably be an explanation on how to do things with the MPF beyond what you get for free. For example, I had to do some special stuff to get the "References" folder to really be "Wixlib References".