Update Wix to 5.x.x#8268
Conversation
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8268) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (74ms) : 72, 76
master - mean (74ms) : 71, 76
section Bailout
This PR (8268) - mean (79ms) : 77, 80
master - mean (78ms) : 76, 80
section CallTarget+Inlining+NGEN
This PR (8268) - mean (1,093ms) : 1051, 1135
master - mean (1,088ms) : 1031, 1145
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (117ms) : 114, 120
master - mean (117ms) : 114, 121
section Bailout
This PR (8268) - mean (119ms) : 116, 122
master - mean (119ms) : 116, 121
section CallTarget+Inlining+NGEN
This PR (8268) - mean (760ms) : 732, 788
master - mean (782ms) : 728, 835
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (105ms) : 102, 108
master - mean (102ms) : 100, 104
section Bailout
This PR (8268) - mean (105ms) : 103, 108
master - mean (103ms) : 101, 106
section CallTarget+Inlining+NGEN
This PR (8268) - mean (718ms) : 695, 741
master - mean (765ms) : 722, 808
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (102ms) : 99, 105
master - mean (102ms) : 99, 105
section Bailout
This PR (8268) - mean (104ms) : 102, 107
master - mean (102ms) : 100, 104
section CallTarget+Inlining+NGEN
This PR (8268) - mean (661ms) : 643, 679
master - mean (680ms) : 663, 698
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (195ms) : 190, 199
master - mean (193ms) : 189, 197
section Bailout
This PR (8268) - mean (199ms) : 192, 205
master - mean (196ms) : 193, 199
section CallTarget+Inlining+NGEN
This PR (8268) - mean (1,153ms) : 1094, 1212
master - mean (1,146ms) : 1096, 1195
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (278ms) : 271, 286
master - mean (278ms) : 271, 284
section Bailout
This PR (8268) - mean (279ms) : 275, 283
master - mean (278ms) : 274, 283
section CallTarget+Inlining+NGEN
This PR (8268) - mean (905ms) : 877, 933
master - mean (944ms) : 903, 985
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (274ms) : 266, 282
master - mean (272ms) : 266, 278
section Bailout
This PR (8268) - mean (272ms) : 269, 275
master - mean (272ms) : 266, 278
section CallTarget+Inlining+NGEN
This PR (8268) - mean (911ms) : 891, 932
master - mean (937ms) : 915, 960
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8268) - mean (271ms) : 264, 278
master - mean (268ms) : 263, 274
section Bailout
This PR (8268) - mean (270ms) : 265, 274
master - mean (270ms) : 265, 274
section CallTarget+Inlining+NGEN
This PR (8268) - mean (822ms) : 803, 842
master - mean (835ms) : 812, 857
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f34a2fd to
7d4239a
Compare
BenchmarksBenchmark execution time: 2026-03-06 11:56:29 Comparing candidate commit bc1cfe3 in PR branch Found 9 performance improvements and 11 performance regressions! Performance is the same for 157 metrics, 15 unstable metrics. scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces net6.0
scenario:Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.AllCycleMoreComplexBody netcoreapp3.1
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody net6.0
scenario:Benchmarks.Trace.Asm.AppSecBodyBenchmark.ObjectExtractorSimpleBody netcoreapp3.1
scenario:Benchmarks.Trace.AspNetCoreBenchmark.SendRequest net6.0
scenario:Benchmarks.Trace.AspNetCoreBenchmark.SendRequest netcoreapp3.1
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces net6.0
scenario:Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces netcoreapp3.1
scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice netcoreapp3.1
scenario:Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool net6.0
scenario:Benchmarks.Trace.ElasticsearchBenchmark.CallElasticsearchAsync net472
scenario:Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark netcoreapp3.1
scenario:Benchmarks.Trace.Log4netBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.NLogBenchmark.EnrichedLog netcoreapp3.1
scenario:Benchmarks.Trace.SingleSpanAspNetCoreBenchmark.SingleSpanAspNetCore net6.0
scenario:Benchmarks.Trace.SpanBenchmark.StartFinishSpan netcoreapp3.1
scenario:Benchmarks.Trace.TraceAnnotationsBenchmark.RunOnMethodBegin net6.0
|
f67dfce to
3fe38ad
Compare
b4cb6de to
bc1cfe3
Compare
14e4b48 to
2b3dfb6
Compare
- http://schemas.microsoft.com/wix/2006/wi → http://wixtoolset.org/schemas/v4/wxs - http://schemas.microsoft.com/wix/UtilExtension → http://wixtoolset.org/schemas/v4/wxs/util - http://schemas.microsoft.com/wix/2006/localization → http://wixtoolset.org/schemas/v4/wxl - Add xmlns declaration to Config.wxi Include element Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Merge Product and Package elements into single Package element - InstallScope → Scope attribute - Drop auto-generated Product Id="*" - Convert Directory tree to use StandardDirectory for well-known folders - Remove TARGETDIR wrapper (implicit in WiX 4) - Remove redundant RegistryValue Action="write" (default in WiX 4) - Simplify empty Directory elements to self-closing tags Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Use WixToolset.Sdk/4.0.5 MSBuild SDK (NuGet-based, no global install) - Replace WixExtension items with PackageReference NuGet entries: WixUtilExtension → WixToolset.Util.wixext WixUIExtension → WixToolset.UI.wixext WixNetFxExtension → WixToolset.Netfx.wixext - Remove Compile/Content/EmbeddedResource items (SDK auto-discovers) - Remove WiX targets imports and EnsureWixToolsetInstalled target - Remove obsolete properties (ProductVersion, ProjectGuid, SchemaVersion, OutputType, SuppressPdbOutput, DefineSolutionProperties) - Simplify Debug conditional to apply to all platforms Co-Authored-By: Claude Opus 4.6 <[email protected]>
This property was specific to WiX 3 and is no longer needed with WiX 4 SDK-style projects. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Bump WixToolset.Sdk from 4.0.5 to 5.0.2. WiX 5 is backward-compatible with WiX 4 authoring (same XML namespace, no schema changes). Extension NuGet packages will automatically resolve to v5-compatible versions. No code changes needed: we don't use Overridable (replaced by virtual/override in v5) or DifxApp (removed in v5). Co-Authored-By: Claude Opus 4.6 <[email protected]>
WiX 5 SDK-style projects work with dotnet build, which handles NuGet SDK resolution automatically without needing a specific MSBuild path. This removes the dependency on having a particular MSBuild installation and is more consistent with how other SDK-style projects are built. Co-Authored-By: Claude Opus 4.6 <[email protected]>
NuGet requires explicit versions on PackageReference items when there is no central package management (Directory.Packages.props). Pin to latest WiX 5 extension versions: - WixToolset.Util.wixext 5.0.2 - WixToolset.UI.wixext 5.0.1 - WixToolset.Netfx.wixext 5.0.2 Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Remove Win64 attribute from all Component elements (WiX 5 infers bitness from the Package platform) - Convert Component Condition child element to Condition attribute - Convert Publish element inner text to Condition attribute - Convert String element inner text to Value attribute - Convert Text element inner text to Value attribute on Control Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Convert Property inner text to Value attribute (ARPPRODUCTICON, ARPURLINFOABOUT, ARPHELPLINK) - Remove Win64 attribute from RegistrySearch (WiX 5 defaults to package platform bitness) Co-Authored-By: Claude Opus 4.6 <[email protected]>
WiX 5 renamed WixUIValidatePath to WixUIValidatePath_$(WIXUIARCH) where WIXUIARCH resolves to the target architecture (X86/X64/A64). Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Custom actions renamed with Wix4 prefix (e.g., ExecSecureObjects_64 → Wix4ExecSecureObjects_X64) - Custom action source DLLs changed (WixCA_x64 → Wix4UtilCA_X64, WixUIWixca → WixUiCa_X64) - WixUIPrintEula custom action removed (WiX 5 no longer includes it) - Registry identifiers regenerated with new WiX 5 hashing (e.g., reg94290E163033D1A6292B7FADE992B182 → regKT3eEzbVD_g1Ie_yyxYAzbfsgFE) - Component IDs updated for registry components - Directory short names changed (CommonAppDataFolder from . → CommApp, ProgramFiles64Folder from . → PFiles64) - File short names (8.3 format) regenerated by WiX 5 - SecureCustomProperties now includes BURNMSIMODIFY;BURNMSIREPAIR;BURNMSIUNINSTALL; prefix - MsiHiddenProperties updated to match new custom action names
bc1cfe3 to
8f06fd3
Compare
Summary of changes
Updates our MSI project to use Wix 5.x.x instead of Wix 3
Reason for change
Wix 3 was deprecated a year ago, and is generally clunky and hard to use, as it relies on a global install + .NET Framework 3.5. The newer versions of Wix use newer SDK-style projects, are deployed as nuget packages, and can just be built with a normal
dotnet buildImplementation details
This was entirely 🤖 driven, but there's also a .NET tool to help with the conversion. Mostly the changes are just "annoying", e.g. moving values from being element text to a
Valueproperty, etc.Test coverage
At the end of the day, the generated MSI is essentially the same as confirmed by the snapshots created in #8270. The changes all appear to be benign changes in hashing algorithms, or renaming of wix properties.
What's more, I tested the install, and it looks the same (and works), and the MSI tests all pass, which is obviously the important thing! 😄
Other details
The removal of the
Win64="yes"andWin64="$(var.Win64)"attributes were the main thing I was unsure about. There is aBitnessattribute now, with valuesdefault,always32, oralways64, which is pretty much equivalent. However, seeing as we only produce an x64 installer, and not an x86 installer, I think this is essentially just legacy cruft which is ok to remove. We might regret that choice if/when we need an arm64 installer, but I think we'll need to look at everything again at that point anyway, so I don't think it's worth worrying about 😄