Repository navigation
Migrate to Uno.Sdk and Uno Platform 7.0 - #319
Open
MartinZikmund wants to merge 30 commits into
Open
MartinZikmund wants to merge 30 commits into
MartinZikmund wants to merge 30 commits into
Conversation
Squashed recreation of CommunityToolkit#305 on top of CommunityToolkit#315. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno.Sdk 7.0.0-dev.51 / Uno.WinUI 7.0.0-dev.1656, which require .NET 10. WinUI 2 (Uno.UI 5.x) stays on .NET 9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
See novotnyllc/MSBuildSdkExtras#305 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
The versions pinned by Uno.Sdk 7.0.0-dev still reference pre-7.0 Uno assemblies (unoplatform/uno#24297). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
TextBlock has no Background in WinUI, and Uno 7 removed it for parity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno 7 supports RichTextBlock, so the Uno WinUI 3 heads get the same ColorCode-highlighted source viewer as Windows. ColorCode.WinUI is Windows-only, so its formatter is ported onto ColorCode.Core. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno 7 supports RichTextBlock, so the Uno WinUI 3 heads can use the Labs MarkdownTextBlock instead of showing raw Markdown. Opt-in through LabsMarkdownTextBlockVersion until Labs publishes a build with Uno targets. Links now open through the same handler as on Windows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
FontWeights lives in Microsoft.UI.Text on WinUI 3, and the Labs default inline code size (10) is too small next to 14px body text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Bump Uno.WinUI to 7.0.0-dev.2428 to match the Core version pinned by the SDK. Drop the Uno.WinUI.Lottie reference: Lottie is now built into Uno.WinUI and the standalone package stopped at 7.0.0-dev.1663, which would pull in an older Uno.WinUI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
MartinZikmund
force-pushed
the
mzikmund/uno7-sdk
branch
from
October 27, 2026 06:08
843a88a to
d3a60e4
Compare
dotnet build reads -r as --runtime, so on Linux the following -m became the RuntimeIdentifier (NETSDK1083). It also restores implicitly, scoped to -f, while an explicit -restore restores the whole graph with the head's TFM. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
3.0.3 is built against Uno.WinUI 5, so EventTriggerBehavior wasn't a WinUI 3 DependencyObject on Uno 7 (CS1503). 4.0.0-dev.10 targets Uno.WinUI 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
…ects It's part of the shared framework from .NET 10, so the explicit reference fails with NU1510 under warnings-as-errors on the Uno 7 (net10.0) sample builds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
The Uno.Sdk heads referenced the published 8.2.250402 Toolkit packages, which are built against Uno 5 and fail to compile on Uno 7 (CS0012). They now use the same logic as the other heads: the local component projects when the repository provides them, packages otherwise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
…I jobs The published Converters, SettingsControls, Extensions and Triggers packages are built against Uno 5 and fail to compile in the Uno 7 heads (CS0012). Until Uno 7 builds are published, the uno-linux and new-experiment (Uno.Sdk head) jobs check those components out of CommunityToolkit/Windows at a pinned commit that ports them to Uno 7. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1DnHGnhiqjJz6RnRw
win:Background is read as an attached property by the UWP and WinAppSDK XAML compilers (WMC0011), and the Uno TextBlock fallback has no Background. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Uno 7 sets SupportedOSPlatformVersion to 24, which conflicts with the hardcoded minSdkVersion 21 in the manifest (XA1036). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The Uno.Sdk head runs on Uno 7 (Uno.WinUI). In WinUI 2 solutions it pulled the Uno 5 Uno.UI components in next to it (UNOB0001) and built them for net10.0-ios against net9.0-ios restore graphs (NETSDK1005). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
…aths project-template builds the Uno.Sdk head too, so it hits the same CS0012 as the gallery jobs with the Uno 5 Toolkit packages. Long paths are needed for the wwwroot/package_<hash>/ files Uno's wasm runtime deploys. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved dependency and target-framework incompatibilities break supported builds, while unchecked native build failures can cause CI to report success.
7 open issues
Stop the build loop immediately when a native build fails · New Gate Uno.Sdk head selection on WinUI 3 · New Map macOS to the shared framework on WinUI 3 · New Restrict macOS common-TFM mapping to WinUI 3 · New Use Uno 7-compatible fallback dependency packages · New Select a framework for multi-targeted generated projects · New Preserve package metadata generation in new heads · New
What changed in this PR
Migrates the Toolkit’s sample apps and gallery to Uno.Sdk and Uno Platform 7, adding unified .NET 10 heads while retaining separate WinUI 2 dependency paths.
Changes:
- Adds unified Uno heads with desktop, WebAssembly, Android and iOS startup code and assets.
- Updates platform mappings, solution generation, build scripts and CI for the new heads.
- Adapts shared documentation and source-code rendering for Uno 7.
| File | Description |
|---|---|
| ToolkitComponent.SampleProject.props | Omits the explicit immutable-collections package on .NET 10. |
| ProjectTemplate/src/MultiTarget.props | Updates the template’s desktop targets. |
| ProjectHeads/Tasks/CheckMultiTarget.props | Supports matching multiple head targets. |
| ProjectHeads/Targets/AddMultiTargetCompatibleSampleDocs.targets | Filters documentation for requested desktop platforms. |
| ProjectHeads/SingleComponent/Wasm/Program.cs | Adds Uno host-builder startup for WinUI 3. |
| ProjectHeads/SingleComponent/Uno/ProjectTemplate.Uno.csproj | Adds the unified single-component Uno head. |
| ProjectHeads/SingleComponent/Uno/Platforms/WebAssembly/WasmScripts/AppManifest.js | Defines the browser app display name. |
| ProjectHeads/SingleComponent/Uno/Platforms/WebAssembly/Program.cs | Adds WebAssembly startup. |
| ProjectHeads/SingleComponent/Uno/Platforms/WebAssembly/manifest.webmanifest | Adds web app metadata. |
| ProjectHeads/SingleComponent/Uno/Platforms/WebAssembly/LinkerConfig.xml | Preserves the sample app assembly. |
| ProjectHeads/SingleComponent/Uno/Platforms/iOS/PrivacyInfo.xcprivacy | Declares iOS privacy API usage. |
| ProjectHeads/SingleComponent/Uno/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json | Adds launch-image catalog metadata. |
| ProjectHeads/SingleComponent/Uno/Platforms/iOS/Main.iOS.cs | Adds UIKit host startup. |
| ProjectHeads/SingleComponent/Uno/Platforms/iOS/Info.plist | Defines iOS app configuration. |
| ProjectHeads/SingleComponent/Uno/Platforms/iOS/Entitlements.plist | Adds an empty entitlements manifest. |
| ProjectHeads/SingleComponent/Uno/Platforms/Desktop/Program.cs | Registers supported desktop backends. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/Resources/values/Styles.xml | Defines Android app and splash themes. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/Resources/values/Strings.xml | Defines the Android app name. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/MainActivity.Android.cs | Adds the Android launcher activity. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/Main.Android.cs | Initializes the Android application. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/environment.conf | Configures Mono garbage collection. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/Assets/AboutAssets.txt | Documents Android asset inclusion. |
| ProjectHeads/SingleComponent/Uno/Platforms/Android/AndroidManifest.xml | Defines Android manifest settings. |
| ProjectHeads/SingleComponent/Uno/Assets/Splash/splash_screen.svg | Adds splash artwork. |
| ProjectHeads/SingleComponent/Uno/Assets/SharedAssets.md | Documents shared asset conventions. |
| ProjectHeads/SingleComponent/Uno/Assets/Icons/icon.svg | Adds the icon background. |
| ProjectHeads/SingleComponent/Uno/Assets/Icons/icon_foreground.svg | Adds the icon foreground. |
| ProjectHeads/GenerateSingleSampleHeads.ps1 | Accepts the revised desktop targets. |
| ProjectHeads/App.Head.Wasm.props | Updates output-path and logging dependency settings. |
| ProjectHeads/App.Head.Uno.WinUI.Dependencies.props | Updates Uno dependencies and adds optional Markdown support. |
| ProjectHeads/App.Head.Uno.UI.Dependencies.props | Removes trailing blank lines only. |
| ProjectHeads/App.Head.Uno.props | Selects dependencies by WinUI version. |
| ProjectHeads/App.Head.ToolkitDependencies.props | Extracts shared Toolkit dependency selection. |
| ProjectHeads/App.Head.props | Imports the extracted Toolkit dependencies. |
| ProjectHeads/App.Head.Android.props | Disables Android ahead-of-time compilation. |
| ProjectHeads/AllComponents/Wasm/Program.cs | Adds Uno host-builder startup for WinUI 3. |
| ProjectHeads/AllComponents/Wasm/CommunityToolkit.App.Wasm.csproj | Loads the WinUI version before framework selection. |
| ProjectHeads/AllComponents/Uno/Platforms/WebAssembly/WasmScripts/AppManifest.js | Defines the gallery’s browser display name. |
| ProjectHeads/AllComponents/Uno/Platforms/WebAssembly/Program.cs | Adds gallery WebAssembly startup. |
| ProjectHeads/AllComponents/Uno/Platforms/WebAssembly/manifest.webmanifest | Adds gallery web app metadata. |
| ProjectHeads/AllComponents/Uno/Platforms/WebAssembly/LinkerConfig.xml | Preserves the gallery assembly. |
| ProjectHeads/AllComponents/Uno/Platforms/iOS/PrivacyInfo.xcprivacy | Declares gallery iOS privacy API usage. |
| ProjectHeads/AllComponents/Uno/Platforms/iOS/Media.xcassets/LaunchImages.launchimage/Contents.json | Adds launch-image catalog metadata. |
| ProjectHeads/AllComponents/Uno/Platforms/iOS/Main.iOS.cs | Adds gallery UIKit startup. |
| ProjectHeads/AllComponents/Uno/Platforms/iOS/Info.plist | Defines gallery iOS configuration. |
| ProjectHeads/AllComponents/Uno/Platforms/iOS/Entitlements.plist | Adds an empty entitlements manifest. |
| ProjectHeads/AllComponents/Uno/Platforms/Desktop/Program.cs | Registers gallery desktop backends. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/Resources/values/Styles.xml | Defines gallery Android themes. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/Resources/values/Strings.xml | Defines the gallery’s Android name. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/MainActivity.Android.cs | Adds the gallery launcher activity. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/Main.Android.cs | Initializes the gallery’s Android application. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/environment.conf | Configures Mono garbage collection. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/Assets/AboutAssets.txt | Documents Android asset inclusion. |
| ProjectHeads/AllComponents/Uno/Platforms/Android/AndroidManifest.xml | Defines gallery Android manifest settings. |
| ProjectHeads/AllComponents/Uno/CommunityToolkit.App.Uno.csproj | Adds the unified Uno gallery head. |
| ProjectHeads/AllComponents/Uno/Assets/Splash/splash_screen.svg | Adds gallery splash artwork. |
| ProjectHeads/AllComponents/Uno/Assets/SharedAssets.md | Documents shared asset conventions. |
| ProjectHeads/AllComponents/Uno/Assets/Icons/icon.svg | Adds the gallery icon background. |
| ProjectHeads/AllComponents/Uno/Assets/Icons/icon_foreground.svg | Adds the gallery icon foreground. |
| MultiTarget/UseUnoWinUI.ps1 | Removes broad Uno package-name substitutions. |
| MultiTarget/UseTargetFrameworks.ps1 | Accepts win32 and renamed linux targets. |
| MultiTarget/Test-Component-Support.ps1 | Updates platform support by WinUI version. |
| MultiTarget/ReadMe.md | Documents framework and platform mappings. |
| MultiTarget/PackageReferences/Uno.props | Separates Uno 5 and Uno 7 dependencies. |
| MultiTarget/MultiTargetIdentifiers.props | Adds Win32 and revised Linux identification. |
| MultiTarget/MultiTargetAwareSharedProjectImport.props.template | Renames the Linux platform condition. |
| MultiTarget/MultiTargetAwareProjectReference.props.template | Adds Win32 and revised Linux reference conditions. |
| MultiTarget/Library.props | Reorders version imports and corrects .NET framework inference. |
| MultiTarget/GenerateMultiTargetAwareProjectReferenceProps.ps1 | Generates references for updated platform identifiers. |
| MultiTarget/GenerateAllProjectReferences.ps1 | Updates supported reference-generation targets. |
| MultiTarget/Filter-Supported-Components.ps1 | Updates component-filter target names. |
| MultiTarget/EnabledTargetFrameworks.props | Selects shared desktop and version-specific macOS frameworks. |
| MultiTarget/DefinedConstants.props | Adds desktop and .NET 10 compilation constants. |
| MultiTarget/Defaults.props | Updates default platform targets. |
| MultiTarget/AvailableTargetFrameworks.props | Selects Uno framework versions by WinUI version. |
| global.json | Pins Uno.Sdk. |
| GenerateVSCodeLaunchConfig.ps1 | Adds Uno launch configurations. |
| GenerateSingleSolution.ps1 | Selects the unified head for component solutions. |
| GenerateAllSolution.ps1 | Selects the unified gallery head and updates defaults. |
| CommunityToolkit.App.Shared/Renderers/ToolkitSampleRenderer.xaml.cs | Adds rich-text source rendering on Uno 7. |
| CommunityToolkit.App.Shared/Renderers/ToolkitSampleRenderer.xaml | Adds hosts for platform-specific code renderers. |
| CommunityToolkit.App.Shared/Renderers/ToolkitDocumentationRenderer.xaml.cs | Handles links from the optional Markdown control. |
| CommunityToolkit.App.Shared/Renderers/ToolkitDocumentationRenderer.xaml | Removes the shared background assignment. |
| CommunityToolkit.App.Shared/Renderers/Markdown/MarkdownTextBlock.cs | Adds optional Labs Markdown support and Uno fallbacks. |
| CommunityToolkit.App.Shared/Polyfills/ColorCode/RichTextBlockFormatter.cs | Adds an Uno-compatible syntax-highlighting formatter. |
| CommunityToolkit.App.Shared/CommunityToolkit.App.Shared.projitems | Includes the new formatter. |
| Build-Toolkit-Gallery.ps1 | Builds Uno frameworks individually and supports Unix builds. |
| Build-Toolkit-Components.ps1 | Accepts updated component platform targets. |
| .github/workflows/config/Directory.Build.props | Locates local Toolkit dependency projects for CI. |
| .github/workflows/build.yml | Adds Uno workloads, source dependencies and revised build jobs. |
Review effort: Balanced
Setting LongPathsEnabled mid-job doesn't take effect on the hosted runners, so the wasm builds still hit MAX_PATH (MSB3021) by a character or two. Building from a drive letter mapped to the workspace keeps the paths well under it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The wasdk/uwp test packages are registered by the AppX deployment service, which can't resolve a per-user subst drive (DEP0700, AppxManifest.xml not found). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Uno 7 moved NativeApplication and ApplicationActivity to Uno.UI.Runtime.Android (CS0234), and NativeApplication now builds the app through CreateHost. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On WinUI 3 macos maps to the shared net10.0 build, but only wasm/wpf/win32/linux marked that build as Uno. A component targeting macos without those got a bare net10.0 build with no WinUI references or constants (CS0246 on Windows.UI.Xaml). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On WinUI 2 macos is Mac Catalyst, but it also enabled the shared net9.0 build, which a component targeting macos without wasm/wpf/linux got as a bare net9.0 library with no Uno or WinUI references (CS0246 on Windows.UI.Xaml). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Picks up unoplatform/uno#25841, which drops [DynamicallyAccessedMembers] from DependencyProperty.Register. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNtyvCafb6Ej7cqotkAC
Building the Uno.Sdk head one TFM at a time let a later successful build overwrite $LASTEXITCODE, so CI passed with a failed desktop build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
Mirrors GenerateAllSolution.ps1: WinUI 2 with wasm plus an Uno.Sdk MultiTarget dropped the classic Wasm head for the Uno 7 head. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
dotnet run can't pick a framework of a multi-targeted project on its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
They skip App.Head.props' AddAssemblyAttributes, so the docs renderer hid its Source code / Package info panel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TXMNu1X7Zewxqb59NXx6g8
2 tasks
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.


No description provided.