Repository navigation
Move to .NET 10 (LTS), keeping Uno.Sdk 6.7.45 - #18
Merged
Merged
Conversation
.NET 9 support ended on 2026-11-10. global.json now pins the 10.0.1xx SDK band (10.0.100, latestPatch), which Visual Studio 2022 17.14 can still load, and every project targets net10.0: the samples browser, the 331 standalone samples, the sample template and the two CI helper tools. The HintPaths to the dev-tools build output keep net9.0, the libraries' own framework. On net10.0-desktop, Uno 6.7 adds the WebView2Aot package, whose WebView2 namespace hid the WebView2 control in SampleHostPage; the type is now fully qualified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The retiring service worker, the Open Sans subset and the gzip removal were conditioned on net9.0-browserwasm, so .NET 10 would have skipped them (and their CI checks would have failed the build). Their comments now name the .NET 10 bootstrapper and SDK too: both still write service-worker.js and .gz copies. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 11, 2026
Review follow-up: the sample instructions named only Visual Studio 2026, while the requirements say Visual Studio 2022 17.14 also builds the projects. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 11, 2026
global.json takes vnext's version, which names only the Uno.Sdk. Both workflows install the newest .NET 10 SDK (setup-dotnet 10.0.x) instead of reading an SDK from global.json, and the deploy's step that pinned 9.0.315 for CI runs is gone. Visual Studio 2022 17.14 uses the newest SDK it can load, so it builds the net10.0 targets when a 10.0.1xx SDK is installed; the README says so. DropGzipCopies takes vnext's version from #19 (keep the dotnet.native.wasm gzip copy) and runs for net10.0-browserwasm. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
|
I merged vnext into this branch (821592d) so it merges cleanly again, and took the SDK pin out. Since #23, vnext's
Checked:
The "global.json" and "Team setup" parts of the description above still describe the 10.0.1xx pin. 🤖 Generated with Claude Code |
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.
.NET 9 support ended on 2026-11-10; 9.0.23 was its last patch. This PR moves the samples browser, the 331 standalone samples, the sample template and the two CI helper tools to .NET 10, the current LTS (supported until 2028-11-14). Uno.Sdk stays at 6.7.45 and the Infragistics packages at 26.1.1000-alpha.25.
Before the showcase: what to decide
uno-config.jsnames a fingerprinteddotnet.<hash>.js, and the bootstrapper writesuno-config.jsafter it has named the package folder. A later deploy that keeps the folder name but changesdotnet.<hash>.jswould leave a browser that kept the olduno-config.jsasking for a deleted file, and the app would not start. That's the scenario of Uno.Wasm.Bootstrap issues #1076 and #1090; I haven't reproduced it here.index.htmlis alreadyno-cache.uno-config.jswithoutCache-Controltoday, so browsers may keep it for a while on their own. Set explicit Cache-Control headers for the WebAssembly site #16 makes itno-cache; copies cached before Set explicit Cache-Control headers for the WebAssembly site #16 is deployed expire on the browser's own schedule, so deploy Set explicit Cache-Control headers for the WebAssembly site #16 some time before the event.web.configcomment lists_framework/dotnet.jsandblazor.boot.jsonas no-cache files. On .NET 10 they're gone, anddotnet.<hash>.jscorrectly gets the one-year policy. Whichever of Set explicit Cache-Control headers for the WebAssembly site #16 and this PR merges second should update that comment; I'll do it.DropGzipCopiestarget as this PR, so whichever merges second gets a one-line conflict.net9.0-browserwasmtonet10.0-browserwasm; otherwise .NET 10 would skip them.service-worker.jsis the retiring worker from Turn off the PWA service worker #12.git revert -m 1 <merge commit>on vnext, then push. CI rebuilds .NET 9 and deploys it to staging. If Keep the gzip copy of dotnet.native.wasm #19 merged after this PR, the revert conflicts onDropGzipCopies. Browsers keep the .NET 10 fingerprinted files in their caches, which is harmless.Changes
global.json: SDK9.0.315→10.0.100, still withrollForward: latestPatch, so it uses the newest 10.0.1xx installed.actions/setup-dotnetapplieslatestPatch. vnext's9.0.315pin built with 9.0.321, as the Emscripten cache key shows.net9.0-*→net10.0-*inSamplesBrowser.csproj, all 331samples/**/Sample.csproj, andscripts/uno-template/Sample.csproj(so newly scaffolded samples match). The$(InfragisticsUnoBuild)\net9.0\HintPaths stay: that folder is the libraries' own build output, and net10.0 apps use the net9.0 libraries as they are.tests/SampleLinksandscripts/source-viewer:net9.0→net10.0. CI runs them withdotnet run, and with only the .NET 10 runtime installed a net9.0 tool would not start.--frameworkandTargetFrameworks→net10.0-browserwasm. The publish flags, the Emscripten cache (WasmCachePathstill works) and the Validate deployable site checks pass as they are.PublishDocumentationSource, and the targets from Turn off the PWA service worker #12, Preload only the six Open Sans faces the samples use #13 and Ship only Brotli copies of the WebAssembly site #14 (PublishRetiringServiceWorker,PublishOpenSansSubset,DropGzipCopies), now run fornet10.0-browserwasm. Their comments name the .NET 10 bootstrapper and SDK too: both still writeservice-worker.jsand.gzcopies.SampleHostPage.xaml.cs:WebView2→Microsoft.UI.Xaml.Controls.WebView2. On net10.0-desktop, Uno 6.7 adds theWebView2Aotpackage, and the unqualified name then resolves to a namespace (CS0118), so the desktop head didn't compile.What the WebAssembly build changes
I did a local AOT publish of this branch, after merging vnext 7c3993e, with the CI flags, and compared it with CI's .NET 9 build of the same commit.
blazor.boot.jsonand the unfingerprinteddotnet.jsare gone.dotnet.<hash>.jsreplaces them, anduno-config.jsnames it. 1,383 → 1,378 files.dotnet.native.wasmis 112.3 → 116.3 MB raw, but only 18.40 → 18.54 MB as Brotli.Tested locally
Sites were served by IIS Express with the site's own
web.configand loaded in headless Chrome. nginx and CloudFront weren't involved.After merging vnext (with #9 and #11–#14):
.gzis published.Before that merge (A/B against .NET 9, two runs per build):
All 331 samples, opened as direct links (the documentation iframe view), with screenshots compared pixel by pixel:
grids/data-grid/binding-remote-data(Remote-data grid sample freezes the browser tab on WebAssembly #10) hangs after loading.charts/data-chart/data-annotation-multiple-with-stockshangs.maps/geo-map/display-esri-imagerydoesn't load.binding-live-dataandpie-chart/animationshow live or animated data. I compared the twobinding-live-datascreenshots by eye: both render the full grid.charts/toolbar/custom-toollogs the same CORS error on both builds. It fetches an icon from svgrepo.com, which is blocked whichever build serves it.Startup of the full app (home page, 2 sessions × 4 loads per build; the PWA was still on then):
Both differences are within run-to-run variation.
Desktop head: all 331 samples, Release builds on Windows, through the repository's own smoke runner (
SAMPLES_SMOKEinSmokeRunner.cs), including its property-editor interactions. .NET 9 (vnext 7c3993e) and .NET 10 behave the same:charts/data-chart/data-annotation-multiple-with-stocks, which also hangs in the browser on both versions. That's a data chart issue unrelated to .NET 10.grids/data-grid/row-pinningonce made no progress for 3 minutes during the full run. Run on its own, it passed 2 of 2 times on each version, in about 4 s.Other builds:
SampleLinksand the source-viewer self-test pass.Platforms on .NET 10
Temporary draft #22 (this PR combined with an earlier version of #20, since closed) ran that PR build on .NET 10:
Platforms/iOSfiles that Add a pull request build for the site and every platform #20 adds.Uno.WinUI.Runtime.Skia.AppleUIKitbringsUno.icu-ios, which has no Mac Catalyst library, so the link fails. Add a pull request build for the site and every platform #20 explains it and leaves Mac Catalyst out of the matrix.Not tested
Not in this PR
🤖 Generated with Claude Code