Skip to content

Default to the newest CRT toolset, including the unversioned one - #190

Open
roblabla wants to merge 1 commit into
Jake-Shadle:mainfrom
roblabla:roblabla/push-nnxnonkmxpps
Open

roblabla wants to merge 1 commit into
Jake-Shadle:mainfrom
roblabla:roblabla/push-nnxnonkmxpps

Conversation

@roblabla

@roblabla roblabla commented Oct 15, 2026 •

Copy link
Copy Markdown

In the current version of xwin, the default CRT version installed is the highest Microsoft.VisualStudio.Component.VC.<version>.x86.x64 dependency of BuildTools. The problem is, the newest toolset of a given manifest isn't always one of them.

For instance, take this manifest (which is the latest version of VS2019 at the time of writing):
https://raw.githubusercontent.com/roblabla/msvc-manifest-history/208c7e13a9fb9fc3bf7561d7e2d49388ead8d60a/manifest.json

Within it, the versioned components stop at 14.29.16.10. However, the toolset pointed to by the Microsoft.VisualCpp.CRT.Headers component is 14.29.16.11. See this dependency tree:

Microsoft.VisualStudio.Component.VC.Tools.x86.x64
-> Microsoft.VisualStudio.PackageGroup.VC.Tools.x86
-> Microsoft.VisualCpp.CRT.Headers
-> Microsoft.VC.14.29.16.11.CRT.Headers.base

Versus the versioned deptree:

Microsoft.VisualStudio.Component.VC.14.29.16.10.x86.x64
-> Microsoft.VC.14.29.16.10.CRT.Headers
-> Microsoft.VC.14.29.16.10.CRT.Headers.base

This means that previously, xwin defaulted to an older version of the CRT, a different one from what the Visual Studio default would install.

To fix this issue, the toolset the alias points at is now a candidate as well. The deterministic test pins a VS 2019 manifest, so its snapshot moves from the 16.10 to the 16.11 CRT.

--crt-version also accepts a version that only exists as a headers package, so 14.29.16.11 can be requested explicitly.

The default CRT version was the highest
`Microsoft.VisualStudio.Component.VC.<version>.x86.x64` dependency of
BuildTools. The problem is, the newest toolset of a given manifest isn't
always one of them.

For instance, take this manifest (which is the latest version of VS2019 at the
time of writing):
https://raw.githubusercontent.com/roblabla/msvc-manifest-history/208c7e13a9fb9fc3bf7561d7e2d49388ead8d60a/manifest.json

Within it, the versioned components stop at 14.29.16.10. However, the toolset
pointed to by the `Microsoft.VisualCpp.CRT.Headers` component is 14.29.16.11.
See this dependency tree:

  Microsoft.VisualStudio.Component.VC.Tools.x86.x64
    -> Microsoft.VisualStudio.PackageGroup.VC.Tools.x86
    -> Microsoft.VisualCpp.CRT.Headers
    -> Microsoft.VC.14.29.16.11.CRT.Headers.base

Versus the versioned deptree:

  Microsoft.VisualStudio.Component.VC.14.29.16.10.x86.x64
    -> Microsoft.VC.14.29.16.10.CRT.Headers
    -> Microsoft.VC.14.29.16.10.CRT.Headers.base

This means that previously, xwin defaulted to an older version of the
CRT, a different one from what the Visual Studio default would install.

To fix this issue, the toolset the alias points at is now a candidate as well.
The deterministic test pins a VS 2019 manifest, so its snapshot moves from
the 16.10 to the 16.11 CRT.

--crt-version also accepts a version that only exists as a headers package,
so 14.29.16.11 can be requested explicitly.
@roblabla
roblabla requested a review from Jake-Shadle as a code owner October 15, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant