Update: See the new plan!
As I mentioned in my previous post, I believe that support for Visual Studio 2013 is the big-ticket set of work we need to accomplish to ship the WiX v3.8 release. Here’s a list of open v3.8 issues for Visual Studio 2013 support. Supporting Votive integration in VS2013 is, perhaps, the biggest. Here’s what I think that work entails:
- Update Votive to use the latest Managed Package Framework.
- Update Votive installer to install the new Votive assemblies and templates and handle VS2013 detection and integration.
The second bullet is easy. The first might be too.
The Managed Package Framework (MPF to its friends) is a set of classes that simplifies, at least a little bit, the job of creating a project system for Visual Studio. The MPF as a whole used to be part of the Visual Studio SDK, but now ships partly in Visual Studio itself and partly as projects on Codeplex:
Because MPF is code, it has bugs and Microsoft has updated MPF for every release of Visual Studio to fix bugs and adapt the MPF for that version. There isn’t yet an MPF12 specifically for VS2013.
WiX v3.7 has two versions of the MPF and produces two versions of Votive based on them: One for VS2008 and one for VS2010. The VS2010 version is also used for VS2012.
[[Update: Original sentence was “The VS2010 version is also used for VS2013.”]]
That’s very convenient…and that’s a problem.
There are a couple of bugs against Votive in VS2012 that (apparently) are due to its use of the MPF10. The recommended fix was to update the version of MPF that Votive uses to MPF11.
So there are a couple of options:
- Continue to use MPF10 to build Votive for VS2010, VS2012, and VS2013. This will probably work for Visual Studio 2013 with the same bugs that exist for VS2012. This is the option with the least amount of work. The downside is that it doesn’t address the bugs that would be fixed if we adopted the newer MPF and it just adds to our technical debt: Undoubtedly some future version of Visual Studio will not work acceptably well with MPF10.
- Bring in MPF11 and create a new Votive assembly for both VS2012 and VS2013. That should fix the known bugs at the cost of adapting all the Votive code to work with the changes introduced in MPF11. The biggest is a namespace change that breaks source compatibility with previous releases of MPF. That requires either lots of conditionals in the Votive code or duplicating it. Both options give me hives.
- Bring in the MPF11 and use it to build Votive for VS2010, VS2012, and VS2013. This would incur additional testing cost but would let us get rid of the copy of MPF10 in the WiX source tree and eliminate the partial duplication of the Votive code for MPF10. Naturally, this assumes MPF11 can be used at all in a previous release of Visual Studio.
There’s another wrinkle: We plan to deprecate support for VS2008. I definitely don’t want to spend a lot of time mucking around in Votive for VS2008, nor do I want to introduce a lot of churn that might destabilize Votive for VS2008 just when we deprecate it. Duplicating the Votive code for VS2010 and VS2012/VS2013 would let us avoid that, as unpleasant as duplication is.
So for WiX v3.8 I’m proposing to implement option #3 by duplicating code as needed to isolate “Votive 2013” and break ties with any shared code. Once that code is working, we can switch VS2012 to use Votive 2013 and try it with VS2010. If MPF11 isn’t compatible with VS2010, we’re no worse off. And worse comes to worst, we can consider option #1.
If you’re interested in contributing to Votive 2013, please reply to the thread I’ll start on wix-devs. It would be a challenge to parallelize the work, but I’m happy to get others involved. Git makes it relatively easy to share work in progress.