Repository navigation
Conversation
Move every project to net10.0 or net10.0-windows, select SDK 10.0.402 in global.json, and pin the self-contained app and update helper to runtime 10.0.13. Regenerate the lockfiles with an audited restore: the trimmer package follows the runtime, and the framework now supplies System.Security.Principal.Windows to the test projects. Replace the bundled runtime notices with the 10.0.13 package files and update their hashes, packaging references, build paths and build guides. Rename a lambda parameter that C# 14 reads as the field keyword, and apply the .NET 10 formatter's whitespace changes so the full format check keeps passing.
The published notices file ends with a blank line and is hash-verified, so treat it like the other upstream license files.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves Wisp from .NET 8 to .NET 10 LTS ahead of the .NET 8 end of support on November 10, 2026. Tracks #59 and follows docs/DOTNET-10-MIGRATION.md. No release version is assigned here.
Versions
global.json,rollForward: latestPatch)RuntimeFrameworkVersion, app and update helper)net8.0,net8.0-windowsnet10.0,net10.0-windows10.0.13 / 10.0.402 is the October 13, 2026 security release, the current .NET 10 patch. 10.0.402 is the latest SDK feature band, as 8.0.426 was for .NET 8. .NET 10 is supported through November 14, 2028.
Windows support is unchanged: the .NET 10 supported-OS list for Windows is identical to .NET 8's, and the documented requirement stays Windows 10 or 11, 64-bit.
Changes
--force-evaluate,NuGetAuditMode=all, no advisories) and verified with--locked-mode. Only two packages changed:Microsoft.NET.ILLink.Tasks8.0.31 → 10.0.13 (update-helper trimmer; it follows the runtime).System.Security.Principal.Windows5.0.0 removed from the five test projects. .NET 10 includes it in the framework, so NuGet now leaves it out.Microsoft.NETCore.App.Runtime.win-x64andMicrosoft.WindowsDesktop.App.Runtime.win-x64, both Microsoft author-signed and nuget.org repository-signed). Both license files are byte-identical to 8.0.31; only the runtime third-party notices changed (SHA-2566D15E10A…8A21). Hashes, packaging references,.gitattributes,THIRD-PARTY-NOTICES.md, build paths and build guides are updated; historical release notes are untouched.fieldas a keyword inside property accessors, so a lambda parameter inTuneSnapshot.IsCompleteis renamed (CS9273).else foreach/if … lockdifferently and wants a blank line after ausingbefore a file-scoped namespace. The five affected files are reformatted (whitespace only) so the fulldotnet format --verify-no-changescheck keeps passing..NET 9 and 10 compatibility review
Each item checked against the source:
Wisp.NativeRenderer.dllP/Invokes use the default search path, which still includes the app directory. libmpv usesLoadLibraryExwith an explicit path;winsqlite3.dllis System32-only on purpose.DllImportSearchPath.AssemblyDirectoryno longer falls back (.NET 10). Not used.DynamicResourcetype checking (.NET 10). Code-set theme resources (AppParticleColor,OrbitGlowOpacity, thicknesses, radii) match their property types.Griddefinitions (.NET 10). None; the XAML compiles.BinaryFormatterremoval (.NET 9). Not used. The clipboard is text-only.uintconversion is clamped first. NaN or out-of-rangeintconversions now saturate; the full test suite covers the telemetry and rendering math.Reverse()orContainscalls are affected, and none run in interpreted expression trees. The build is clean with warnings as errors.Acceptance gates
Source commit for all local results:
fd7260b(this PR's head). Local runs used SDK 10.0.402 (SHA-512 verified against Microsoft's release metadata, Microsoft-signeddotnet.exe), VS 2022 Build Tools 17.14 x64, Inno Setup 6.7.3 and Python 3.12.10 on a Windows 11 desktop with a hardware GPU, with Forza and Wisp closed.Nightly workflow on this branch (fd7260b): green. Run 39605293346, dispatched manually on a GitHub Windows runner with SDK 10.0.402 / runtime 10.0.13:
dotnet format --verify-no-changes;Test-AppBehavior.ps1 -Full: Core 781/781, Telemetry 96/96, App 5,996/5,996 includingWpfStyleRuntimeTests, Update 184/184, Updater 75/75, and the four isolated allocation tests;PR CI (fd7260b): green. "Build and test" ran in 6 min on SDK 10.0.402 / runtime 10.0.13: policy, locked audited restore, changed-file formatting, Release build, and the critical and affected tests (App 982, Core 777, Update 184, Telemetry 96, Updater 75). CodeQL passed.
installer/Build-Installer.ps1plus the full suite, native contracts and recorder contracts):--locked-moderestore (NuGetAuditMode=all): pass, no advisories.dotnet format --verify-no-changes: pass. With SDK 8.0.426 the same source also passes, so the whitespace changes in this PR are what the 10.0.402 formatter requires.Test-AppBehavior.ps1 -Full:WpfStyleRuntimeTestsalone: pass. Then the full suite: Core 781/781, Telemetry 96/96, App 5,996/5,996, Update 184/184, Updater 75/75, and the four isolated allocation tests: all pass.WpfStyleRuntimeTests→HudNativeHostTests.AssertForeignOwnerRestart, which asserts that the desktop foreground window is unchanged:6921ce0, SDK 8.0.426) failed the same way during that activity. Both builds passed once the foreground settled, and the tests do not move the foreground themselves. This is a desktop-sensitive check on both runtimes, not a .NET 10 change.SettingsServiceandRunStoreunder .NET 8 and .NET 10 builds of the same source:Savewrites a file byte-identical to the original on both;ConfiguredInstallerPassesRuntimeVerification,ConfiguredInstallerPassesRealRuntimeValidation) and the update-helper guard smoke pass.Build-NativeRenderer.ps1 -RunContractTestson the hardware GPU:contractFailures=0, GPU default, CPU rendering supported, 120 Hz pacing, no resume timeouts. Recorder--self-test(the published binary, hash-matched) and all five recorder contract executables pass.6921ce0on SDK 8.0.426).--calm-shell-check(loaded/color-choice-count) and--scroll-check(InvalidOperationExceptioninnative-digital/initialize) fail identically on the .NET 8 build ofmain. These are existing harness issues outside CI, not caused by this change.--dashboard-window-checkand the--presentmodes were not run; they show activating windows.Wisp-Setup-2.7.0.exe(local, unsigned, version not bumped; SHA-256ADB62037…CE0A) passed the installer build's executable version, architecture, identity, native, recorder, decoder and runtime-validation checks.Wisp.exebundles runtime 10.0.13.mainor a tag, so it runs after merge, before release.Leftover runtime files from older layouts
The installer overwrites files and has no
[InstallDelete], so an install that once held a loose (non-single-file) layout keeps those files after an update. Private diagnostic builds use that layout; public releases have been single-file since 1.0.1.A throwaway single-file WPF executable named
Wisp.exewas run in a folder seeded with 255 loose files from such an install. These included .NET 8wpfgfx_cor3.dll,PresentationNative_cor3.dll,Wisp.dll,Wisp.deps.jsonandWisp.runtimeconfig.json. Under .NET 10 (and .NET 8):No installer change is made here.
Live checks still needed (Steam and Xbox app, separately)