[wix-devs] WiX v4 id versioning

Rob Mensching rob at firegiant.com
Thu Jan 31 08:53:48 PST 2019

As discussed in the meeting #162 (https://www.firegiant.com/blog/2019/1/17/wix-online-meeting-162-highlights/) there was a discussion about WiX Extension versioning. There were some random discussions here after that meeting about that topic but I wanted to focus it on a single thread.

I'm going to assume you're caught up on the conversation. If not, go back and watch the meeting linked in the blog above.

I posit there are two "types" of versions we need to consider here: the core toolset and extensions. (There is actually a third version if we include Votive but since Votive multi-targets WiX Toolset versions (v3 and v4) it's pretty clearly on its own).

We can choose to make the versioning scheme of the core the same as extensions but we don't have to.

There are two parts to consider: the "id" part and the "version" part. The "id" part is a string that must start with "WixToolset." (to reserve the namespace). The "version" part is a semver-based version.

In these examples, I'll be using "#" to designate the automatically increasing "build number" (actually GitVersioning number but that detail isn't important).

Today the core has this important package:

                WixToolset.MSBuild        v4.0.#

Also today, arguably the most used extension is:

                WixToolset.Util.wixext  v4.0.#

Of course, the issue is how to "match" the v4 WixToolset.Util.wixext to the v4 WixToolset.MSBuild after we create v5 WixToolset.MSBuild and need to start creating v5 extensions. Semver on WixToolset.MSBuild is fine because we can go from v4.0.# to v5.0.# and demonstrate the big breaking change*.

However, a breaking change in WixToolset.Util.wixext going from v4.0.# to v5.0.# would make it confusing which versions of WixToolset.Util.wixext went with which versions of WixToolset.MSBuild (i.e. WixToolset.Util.wixext v4.0.# and v5.0.# both target WixToolset.MSBuild v4.0.#). It also could be confusing if we have a WixToolset.MSBuild v4.1.# and WixToolset.Util.wixext has v4.0.# and v4.1.# and v4.2.#.... which maps to which?

So, one option is to push a piece of the version into the "id" part. If we do that then the question is where to put it and do we reset the "version" part to 1.0?

Here are some permutations to consider:

                WixToolset.Util.wixext4                v1.0.#
                WixToolset.Util.wix4ext                v1.0.#
                WixToolset.v4.Util.wixext            v1.0.#

                WixToolset.Util.wixext4                v4.0.#
                WixToolset.Util.wix4ext                v4.0.#
                WixToolset.v4.Util.wixext            v4.0.#


If we wanted to push the version into the id for the core* then it could be one of these (or others?):

                WixToolset.v4.MSBuild                 v1.0.#
                WixToolset.v4.MSBuild                 v4.0.#

So, I'm looking for permutations that people think would be useful (or vote for something already proposed).

* Although if someone wants to argue that we need to be able to have big breaking changes *within* the WiX v4 release, I'd be interested to hear it.


  Rob Mensching
FireGiant  |  Dedicated support for the WiX toolset  |  http://www.firegiant.com/

More information about the wix-devs mailing list