FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

refactor!: Rename the Uno assembly to Uno.WinRT by MartinZikmund · Pull Request #24104 · unoplatform/uno · GitHub

refactor!: Rename the Uno assembly to Uno.WinRT - #24104

Merged
MartinZikmund merged 5 commits into
feature/breakingchangesfrom
dev/mazi/winrt-assembly
Aug 24, 2026
Merged

refactor!: Rename the Uno assembly to Uno.WinRT#24104
MartinZikmund merged 5 commits into
feature/breakingchangesfrom
dev/mazi/winrt-assembly

Conversation

MartinZikmund commented Aug 18, 2026
edited
Loading

Copy link
Copy Markdown
Member

GitHub Issue: closes unoplatform/uno-private#2137

✅ Unblocked — merging this is what unblocks everything downstream

This PR previously carried a do not merge gate on Uno.UI.HotDesign shipping a 7.0 build.
That gate was circular and has been lifted: HotDesign cannot compile against Uno.WinRT.dll
until a package containing it exists, and none ships until this merges. The template test jobs
are temporarily disabled so the chain can move. See
Breaking the deadlock below.

#24009 has merged, so the diff here is now only this PR's own commits.

PR Type:

🔄 Refactoring (no functional changes, no api changes)

What changed? 🚀

Completes the rename begun in #24009, which moved the folder and csprojs to Uno.WinRT but deliberately left the assembly alone. This flips the remaining half:

Layer Before After
Folder / csprojs src/Uno.WinRT + Uno.WinRT.*.csproj unchanged (done in #24009)
AssemblyName (×4) Uno Uno.WinRT
Output Uno.dll in bin/Uno.WinRT.<variant>/ Uno.WinRT.dll, same folder
NuGet package id Uno.WinRT unchanged
RootNamespace Windows unchanged — no type or namespace moves
AndroidResgenNamespace Uno.UWP Uno.WinRT#24009 kept the old value because renaming it alone bought nothing; here the whole assembly moves anyway

Per the breaking-changes hard-remove policy there are no type-forwarders.

PackageDiffIgnore.xml carries a single assembly-level entry, since every type in the assembly reads as removed against the 6.6 baseline. Historical IgnoreSets are untouched.

Why this is a breaking change, and why it is still in 7.0

Uno.dll and Uno.WinRT.dll are different assembly identities. This is the asymmetry that matters:

An API removal breaks a pre-built consumer only if that consumer touches the removed member. An assembly rename makes the assembly reference itself unresolvable, so every consumer fails unconditionally.

Measured, not assumed — type references read out of the shipped Uno.Toolkit.WinUI 6.3.0-dev.6 binaries (net8.0):

Binary → Uno → Uno.UI → Uno.UI.Toolkit
Uno.Toolkit.WinUI.dll 18 254 2
Uno.Toolkit.WinUI.Material.dll 2 125 2
Uno.Toolkit.Skia.WinUI.dll 4 71 1
Uno.Toolkit.WinUI.Cupertino.dll 2 70 2

Those 18 include Windows.UI.Color, Windows.UI.Text.FontWeight, Windows.System.VirtualKey and Windows.UI.Core.CoreDispatcher — types that appear throughout public signatures. The Uno.Sdk references Uno.UI.HotDesign implicitly in every Debug app build, and it transitively pulls Uno.Toolkit.WinUI and Uno.Themes.WinUI, so until those have 7.0 builds every template Debug build fails with CS0012.

That is an ordering problem, not a compatibility one. 7.0 breaks compatibility by design and the first-party ecosystem is being rebuilt for it regardless — so the rename is sequenced inside the 7.0 preview line rather than deferred to a later major. Deferring to 8.0 would buy a second ecosystem-wide rebuild for a change that is purely cosmetic, which is strictly worse than paying for it inside a rebuild that is already funded.

Breaking the deadlock

The original plan was to merge this only after Uno.UI.HotDesign shipped a 7.0 build. That ordering cannot happen: HotDesign cannot be compiled against Uno.WinRT.dll until a package containing Uno.WinRT.dll exists, and no such package is produced until this merges. Waiting for the dependent to move first is waiting for something that cannot happen.

So the sequence is inverted, with the template test jobs temporarily off:

  1. Merge this → 7.0 dev packages start shipping Uno.WinRT.dll.
  2. Uno.UI.HotDesign (and the dependents beneath it) rebuild against those packages.
  3. Re-enable the template tests and drop the workarounds — tracked as a follow-up under the 7.0 epic (unoplatform/uno-private#2323, sub-issue of the 7.0 epic).

What is disabled

Every item carries the greppable marker TODO Uno (7.0 dependents) — git grep for it returns exactly the restore checklist:

File What was done
build/ci/tests/.azure-devops-tests-templates.yml condition: false on Dotnet_Template_Tests_NetCoreMobile_windows, …_macos, Dotnet_Template_Tests_net7_Linux — 12 matrix legs
build/test-scripts/run-net7-template-linux.ps1 -p:UnoDisableHotDesign=true added
build/test-scripts/run-netcore-mobile-template-tests.ps1 -p:UnoDisableHotDesign=true added
build/test-scripts/run-netcore-mobile-template-tests.ps1 UnoFeaturesOverride narrowed to Svg
RealAppLaunchIntegrationTests.cs [Ignore] on WhenRealAppBuiltAndRunWithDevServer_RealConnectionEstablished — see below

Dotnet_Tests_Validate_DevServerCli and …_Compat are deliberately left running — they restore and exercise the DevServer host rather than compiling app code against the local build. Both, and the addin_version_alignment stage, are green on build 229730.

The one unit test that did break

CI found it, not inference. Exactly one test out of 6201 fails, on every run of this branch (2026-08-20 → 08-24), and passes on feature/breakingchanges — deterministic, not flaky:

failed WhenRealAppBuiltAndRunWithDevServer_RealConnectionEstablished
  total: 6201   failed: 1   succeeded: 5937   skipped: 263

It is the same cross-major mixing hazard, injected by the test harness itself:

  1. The harness scaffolds MyApp with dotnet new unoapp from the published Uno.Templates, so the app's output contains the pre-7.0 Uno.dll.
  2. It then overwrites Uno.UI.RemoteControl.dll in that output with the locally built one, so the test exercises the freshly compiled client.
  3. That local assembly references Uno.WinRT (via ProjectReference to Uno.WinRT.Skia.csproj). Before the rename both sides were named Uno and the swap bound fine; now the reference cannot resolve in the app at all.

The app builds clean (0 errors) and launches — app-launch/launched is emitted — but the client never starts, so app-launch/connected never arrives.

Copying Uno.WinRT.dll in alongside does not fix it: the package's Uno.UI.dll still binds every Windows.* type to Uno.dll, trading FileNotFoundException for TypeLoadException. The harness has to scaffold against 7.0 packages — the same restore condition as the template jobs — so the test is [Ignore]d under the same marker.

The cost, stated plainly

Between merge and step 3, CI does not verify that the repository can build its own templates, and a Debug build of a freshly created 7.0-preview app fails. That is a real coverage gap in a preview line, accepted deliberately because the alternative is a chain that never moves.

Reviewer attention: the literals no compiler checks

An assembly identity is referenced by string from places the build never type-checks. Each of these was a separate failure in the earlier attempt:

  • CoreApplication.ts — getAssemblyExports("Uno"), resolved at runtime. No compile-time signal; the symptom is a WASM app that never starts
  • LinkerDefinition.Wasm.xml — <assembly fullname="Uno">; a wrong value trims silently
  • 9 × [assembly: InternalsVisibleTo("Uno")]
  • RuntimeAssetsSelectorTask — drives runtime asset selection
  • UnoAssemblyHelper.cs — the assembly file name argument (the folder and bin/ arguments already moved in refactor: Move the Uno.UWP project to Uno.WinRT #24009)
  • Generator.cs — expectedRefs compares CompilationReference.Display, which is the assembly name; the neighbouring path literals stay Uno.WinRT from refactor: Move the Uno.UWP project to Uno.WinRT #24009
  • Uno.WinRT.nuspec — the trailing Uno.dll / Uno.pdb names only; the Uno.UI.Dispatching.* entries in the same file must not change
  • SamplesApp.Skia.Generic.csproj, TestAssemblyLoadContext.cs, Verifiers/CSGenerator.cs, and the two template test scripts

The duplicate-identity hazard, which fails silently

Uno.dll and Uno.WinRT.dll can both end up in one compilation and define every Windows.* type twice. Roslyn's Compilation.GetTypeByMetadataName returns null on ambiguity rather than erroring, which previously made the XAML generator silently drop literal and extended properties. It broke 8 source-generator tests that reference a pre-7.0 Uno.WinUI package on top of the local build; with identical identities the local assembly simply shadowed the package's. The same failure mode reaches real consumers mixing majors.

PR Checklist ✅

  • 🧪 Added Runtime tests, UI tests, or a manual test sample (for bug fixes / features, if applicable)
    • No new tests: a rename with no behavioural change. Existing suites are the regression proof.
  • 📚 Docs have been added/updated following the documentation template (for bug fixes / features)
    • specs/058-winrt-assembly-rename/spec.md records the merge gate, the string-literal checklist and the outstanding validation; background in specs/056-assembly-renames/spec.md.
  • 🖼️ Validated PR Screenshots Compare Test Run results.
  • ❗ Contains NO breaking changes

This PR contains a breaking change. Uno.dll is renamed to Uno.WinRT.dll. No namespace or type changes, so ordinary source consumers are unaffected. Code that names the assembly must be updated: InternalsVisibleTo, ILLink/trimming descriptors, Assembly.Load, or an explicit <Reference Include="Uno" />. Libraries compiled against Uno 6.x must be recompiled — mixing majors yields duplicate Windows.* types that resolve to null rather than erroring.

Validation

Check Result
Compile — Uno.WinRT.Skia ✅ clean; emits bin/Uno.WinRT.Skia/…/**Uno.WinRT.dll**, matching what the nuspec now packs
Compile — Uno.UI ✅ clean against the renamed assembly, 0 errors

Local builds use -p:UnoTargetFrameworkOverride=net10.0 because feature/breakingchanges targets .NET 11 and no .NET 11 SDK is installed here.

Not validated locally — CI must cover:

  • Uno.WinAppSDKSyncGenerator and Uno.UI.SourceGenerators.Tests are net11-only and cannot be built here at all, and both carry edits from this PR. The generator tests are exactly where the duplicate-identity trap surfaced last time, so a green run is not sufficient on its own — generated output should be compared against a baseline, not just checked for failures.
  • WASM app startup (the getAssemblyExports lookup has no compile-time signal).
  • Template Debug builds — not covered while the jobs are disabled (see above). First real signal comes from the HotDesign rebuild.
  • The Android head (AndroidResgenNamespace) and the mobile PackageDiff.

🤖 Generated with Claude Code

https://claude.ai/code/session_011nVqNSZBu7E3FpHxWyPdtk

CLAassistant commented Aug 18, 2026
edited
Loading

Copy link
Copy Markdown


All committers have signed the CLA.

github-actions Bot commented Aug 18, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 7m 1s —— View job


Code Review

  • Gather PR diff and context
  • Review string-literal assembly references (runtime-only failures)
  • Review generator/tooling changes
  • Review nuspec/build changes
  • Review template test scripts
  • Review PackageDiffIgnore historical IgnoreSets
  • Post inline findings
  • Write summary

Summary

Overall the rename is mechanically thorough — the compiler-invisible literals (WASM getAssemblyExports, linker descriptor, InternalsVisibleTo, RuntimeAssetsSelectorTask, sync generator expectedRefs, nuspec file names) are all updated, and the duplicate-identity trap in the generator tests is cleanly resolved by filtering out the pre-7.0 Uno.dll reference before adding the local Uno.WinRT assemblies.

1 issue, 1 nit — both in build/PackageDiffIgnore.xml and a doc comment respectively.

Issues by severity:

Severity Count Description
Medium 1 Historical IgnoreSets mutated despite PR description saying "untouched"
Nit 1 Awkward comment prose in CoreApplication.cs

Key cross-cutting observations (no line anchor):

  • UnoDisableHotDesign is a real SDK property (Uno.Sdk/targets/Uno.Implicit.Packages.ProjectSystem.targets line 14) — the template test workaround is correctly wired.
  • $sdkFeatures reduction to Svg-only in run-netcore-mobile-template-tests.ps1 is a deliberate, commented trade-off that halves template test coverage during the preview window. Should be restored (with a tracking ticket) once ecosystem packages ship 7.0 builds.
  • The assembly-level 6.6 IgnoreSet entry (<Member fullName="Uno" reason="Assembly renamed …" />) correctly blankets all type-level removal warnings for the rename. The 6.6 baseline comparison should be clean once that entry lands.
  • Validation gap flagged in PR description is real: Uno.WinAppSDKSyncGenerator / Uno.UI.SourceGenerators.Tests are net11-only and cannot be built locally; CI green on those paths is necessary before merge.

github-actions Bot added platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform platform/android 🤖 Categorizes an issue or PR as relevant to the Android platform platform/macos 🍏 Categorizes an issue or PR as relevant to the macOS platform platform/ios 🍎 Categorizes an issue or PR as relevant to the iOS platform area/skia ✏️ Categorizes an issue or PR as relevant to Skia area/code-generation Categorizes an issue or PR as relevant to code generation area/build Categorizes an issue or PR as relevant to build infrastructure area/automation Categorizes an issue or PR as relevant to project automation kind/documentation platform/x11 🐧 Categorizes an issue or PR as relevant to X11 labels Aug 18, 2026
Comment thread build/PackageDiffIgnore.xml Outdated

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24104/wasm-skia-net9/index.html

Copy link
Copy Markdown
Contributor

🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24104/docs/index.html

Copy link
Copy Markdown
Contributor

The build 228353 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 125

Details
  • skia-linux-screenshots: 73 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • DisplayInformation.png-dark
    • DisplayInformation.png
    • DropDownButtonPage.png-dark
    • Gamepad_CurrentReading.png-dark
    • Gamepad_CurrentReading.png
    • Gamepad_Enumeration.png-dark
    • Buttons.png
    • ElementLevelTheme.png-dark
    • ElementLevelTheme.png
    • Focus_FocusVisual_Properties.png-dark
    • ImageBrushInList.png-dark
    • ImageBrushInList.png
    • ExpanderColorValidationPage.png-dark
    • ExpanderColorValidationPage.png
    • Image_Margin_Large.png
    • ImageBrush_Stretch.png
    • ImageIconPage.png-dark
    • ImageIconPage.png
    • CalendarView_Theming.png-dark
    • ContextRequested.png-dark
  • skia-windows-screenshots: 125 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • Examples.png
    • GeolocatorPositionChanged.png-dark
    • GeolocatorPositionChanged.png
    • Focus_FocusVisual_Properties.png-dark
    • Basics Pivot Test.png-dark
    • ButtonClippingTestsControl.png
    • Buttons.png-dark
    • Haptics.VibrationDevice.png-dark
    • Haptics.VibrationDevice.png
    • ColorPickerSample.png
    • EmailManagerTests.png-dark
    • EmailManagerTests.png
    • Contacts_Pick.png-dark
    • Contacts_Pick.png
    • Gamepad_CurrentReading.png-dark
    • Gamepad_Enumeration.png-dark
    • Gamepad_Enumeration.png
    • ImageIconPage.png-dark
    • EllipsemaskingEllipseGrid.png
    • ImageBrush_StreamSource.png-dark

MartinZikmund force-pushed the dev/mazi/winrt-assembly branch from da81abc to 4d2aa25 Compare August 20, 2026 13:41

github-actions Bot commented Aug 20, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 5m 6s —— View job


Code Review

  • Gather PR diff and changed files
  • Review string-literal assembly references
  • Review generator/tooling changes (Generator.cs, CSGenerator.cs, UnoAssemblyHelper.cs)
  • Review build/nuspec/PackageDiffIgnore changes
  • Review template test scripts
  • Review WASM/linker changes
  • Review InternalsVisibleTo updates
  • Post inline findings
  • Write summary

Summary

The rename is mechanically thorough. All compiler-invisible string literals are correctly updated:

Site Was Now Status
CoreApplication.ts:33 getAssemblyExports("Uno") getAssemblyExports("Uno.WinRT")
LinkerDefinition.Wasm.xml:28 <assembly fullname="Uno"> <assembly fullname="Uno.WinRT">
InternalsVisibleTo (×9) "Uno" "Uno.WinRT"
RuntimeAssetsSelectorTask.cs:263 "uno" "uno.winrt"
UnoAssemblyHelper.cs:26 "Uno.dll" "Uno.WinRT.dll"
Generator.cs:2354 expectedRefs "Uno" "Uno.WinRT"
Uno.WinRT.nuspec file names Uno.dll/Uno.pdb Uno.WinRT.dll/Uno.WinRT.pdb
CSGenerator.cs duplicate-identity filter Except(supersededByLocalWinRT)
TestAssemblyLoadContext.cs dead branch "Uno" exact match removed (caught by StartsWith)
run-net7-template-linux.ps1 -p:UnoDisableHotDesign=true
run-netcore-mobile-template-tests.ps1 UnoDisableHotDesign + $sdkFeatures=Svg

Issues by severity:

Severity Count Description
Medium 1 PackageDiffIgnore.xml — historical 4.4.20 and 4.5 IgnoreSets have Uno.UWP.Resource changed to Uno.WinRT.Resource; incorrect for those baselines, and contradicts both the PR description ("historical IgnoreSets are untouched") and the spec ("a single assembly-level entry")
Nit 1 CoreApplication.cs:103 comment prose

Cross-cutting observations (no line anchor):

  • Spec accuracy: specs/058-winrt-assembly-rename/spec.md correctly enumerates all the string-literal sites and the merge gate. Once the IgnoreSet entries are reverted the spec and code will agree.
  • $sdkFeatures=Svg-only in run-netcore-mobile-template-tests.ps1 is a deliberate, well-commented temporary trade-off. A tracking issue to restore the full feature set once ecosystem packages ship 7.0 builds would be useful.
  • Validation gap is real and clearly acknowledged: Uno.WinAppSDKSyncGenerator and Uno.UI.SourceGenerators.Tests are net11-only and cannot be built locally. CI green on those paths is necessary before merge; the spec correctly calls this out.
  • Merge gate is correctly enforced: the "DO NOT MERGE" notice in the commit message and the spec are clear. Nothing structurally prevents an accidental merge except process discipline.

Verdict: fix-first — the IgnoreSet revert is a one-liner and should be done before merge to keep the diff-tool baselines correct.

Comment thread build/PackageDiffIgnore.xml Outdated

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24104/wasm-skia-net9/index.html

Copy link
Copy Markdown
Contributor

🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24104/docs/index.html

Copy link
Copy Markdown
Contributor

The build 228929 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 174

Details
  • skia-linux-screenshots: 73 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • DisplayInformation.png-dark
    • DisplayInformation.png
    • DropDownButtonPage.png-dark
    • DynamicFont.png
    • Attributed_text_FontSize_Changing.png
    • ContentControl_Inheritance.png
    • Focus_FocusVisual_Properties.png-dark
    • CalendarView_Theming.png-dark
    • ContextRequested.png-dark
    • ExpanderColorValidationPage.png-dark
    • ExpanderColorValidationPage.png
    • Gamepad_CurrentReading.png-dark
    • Gamepad_CurrentReading.png
    • Gamepad_Enumeration.png-dark
    • Examples.png
    • ImageBrushInList.png-dark
    • ImageBrushInList.png
    • ButtonClippingTestsControl.png-dark
    • ButtonClippingTestsControl.png
    • ClipboardTests.png-dark
  • skia-windows-screenshots: 174 changed over 2368

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • DropDownButtonPage.png-dark
    • DropDownButtonPage.png
    • EllipsemaskingEllipseGrid.png-dark
    • Buttons.png-dark
    • DataTransferManager.png-dark
    • DataTransferManager.png
    • Focus_FocusState.png-dark
    • Focus_FocusState.png
    • ImagesInlineInFlipView.png-dark
    • ImagesInlineInFlipView.png
    • ImageSourceUrlMsAppDataScheme.png-dark
    • ImageSourceUrlMsAppDataScheme.png
    • EmailManagerTests.png-dark
    • EmailManagerTests.png
    • ImageBrushInList.png-dark
    • ChatBox.png-dark
    • ChatBox.png
    • ElementLevelTheme.png-dark
    • ElementLevelTheme.png
    • Basics Pivot Test.png-dark

MartinZikmund force-pushed the dev/mazi/winrt-assembly branch from 4d2aa25 to 1e9bd6b Compare August 21, 2026 15:50

github-actions Bot commented Aug 21, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 3m 40s —— View job


Code Review

  • Gather PR diff and context
  • Review current state of PackageDiffIgnore.xml (prior finding: historical IgnoreSets mutated)
  • Review CoreApplication.cs comment nit
  • Review new/changed files in this push (spec 058-winrt-assembly-rename/spec.md)
  • Post inline findings
  • Write summary

Summary

This push adds specs/058-winrt-assembly-rename/spec.md (a new documentation-only commit). The two unresolved findings from the Aug 18 and Aug 20 reviews are still present — nothing in this push addressed them.

Issues by severity:

Severity Count Status
Medium 1 Still open — PackageDiffIgnore.xml historical IgnoreSets mutated
Nit 1 Still open — CoreApplication.cs:103 comment prose

Medium — build/PackageDiffIgnore.xml

The rename commit (021a95f1) changed 6 occurrences of Uno.UWP.Resource → Uno.WinRT.Resource inside the historical 4.4.20 (3 occurrences, lines 228/238/248) and 4.5 (3 occurrences, lines 351/361/371) IgnoreSets. At those historical baselines the assembly was named Uno.UWP, so the diff tool compares against Uno.UWP.Resource. Changing these suppresses the wrong type name and will re-surface the Uno.UWP.Resource removal warning while silencing a name (Uno.WinRT.Resource) that was never in those packages. The spec correctly describes the fix as "a single assembly-level entry under 6.6" — the historical entries should be reverted to Uno.UWP.Resource.

The 6.6 <Assemblies> entry (<Member fullName="Uno" reason="Assembly renamed Uno -> Uno.WinRT (7.0 assembly renames)" />) is correct and untouched.

Nit — src/Uno.WinRT/ApplicationModel/Core/CoreApplication.cs:103

"native UI elements in non Uno.WinRT" → "native UI elements outside Uno.WinRT"

New content (no issues):

specs/058-winrt-assembly-rename/spec.md is accurate — its description of the merge gate, the string-literal checklist, and the outstanding CI-only validation items (net11-only generator tests, WASM app startup, template Debug builds, Android ResgenNamespace) match the actual code state. The spec at line 39 says "a single assembly-level entry" which describes the intended state (after the IgnoreSet revert, not the current state).

Verdict: fix-first — revert the six Uno.UWP.Resource → Uno.WinRT.Resource changes in the 4.4.20 and 4.5 IgnoreSets before merge.

MartinZikmund and others added 3 commits August 24, 2026 11:05
Uno.dll becomes Uno.WinRT.dll, so folder, csprojs, assembly and package
finally agree. Flips every identity literal the compiler never checks:
the WASM getAssemblyExports lookup, the linker descriptor, InternalsVisibleTo,
the reference-assembly loader and the sync generator's expected refs.

DO NOT MERGE until Uno.UI.HotDesign ships a 7.0 build: the Uno.Sdk
references it implicitly in every Debug app build, and a 6.x binary cannot
resolve the renamed assembly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011nVqNSZBu7E3FpHxWyPdtk
Records the merge gate, the string literals no compiler checks, and which
validation is still owed to CI.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011nVqNSZBu7E3FpHxWyPdtk
The 4.4.20 and 4.5 IgnoreSets record the type names as they existed in
those baselines, where the Android resgen namespace was Uno.UWP. Renaming
them to Uno.WinRT unsuppressed the real Uno.UWP.Resource removal while
silencing a name that was never in those packages. The 6.6 assembly-level
entry already covers the rename for the current diff baseline.

Also reworded the CoreApplication.RequestedTheme doc comment to read
"outside Uno.WinRT", mirroring the original "outside Uno.dll" phrasing.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PbK9hM2hwovjr4GMj5sAFa
MartinZikmund force-pushed the dev/mazi/winrt-assembly branch from b38f415 to 06fbfd9 Compare August 24, 2026 09:09

github-actions Bot commented Aug 24, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24104/wasm-skia-net9/index.html

Copy link
Copy Markdown
Contributor

🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24104/docs/index.html

Copy link
Copy Markdown
Contributor

The build 229700 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 123

Details
  • skia-linux-screenshots: 73 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • Gamepad_CurrentReading.png-dark
    • Gamepad_CurrentReading.png
    • Gamepad_Enumeration.png-dark
    • CalendarView_Theming.png-dark
    • ClipboardTests.png-dark
    • ClipboardTests.png
    • ContentControl_Inheritance.png
    • ImageBrushInList.png-dark
    • ImageBrushInList.png
    • ImageBrush_Stretch.png
    • Attributed_text_FontSize_Changing.png
    • ButtonClippingTestsControl.png-dark
    • ButtonClippingTestsControl.png
    • Buttons.png
    • ContextRequested.png-dark
    • DisplayInformation.png-dark
    • DisplayInformation.png
    • DropDownButtonPage.png-dark
    • ExpanderColorValidationPage.png-dark
    • ElementLevelTheme.png-dark
  • skia-windows-screenshots: 123 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • Battery.png-dark
    • ButtonClippingTestsControl.png
    • Buttons.png-dark
    • ExpanderColorValidationPage.png-dark
    • Battery.png
    • DropDownButtonPage.png-dark
    • Gamepad_CurrentReading.png-dark
    • Gamepad_CurrentReading.png
    • Gamepad_Enumeration.png-dark
    • Gamepad_Enumeration.png
    • Attributed_text_FontSize_Changing.png-dark
    • CalendarView_Theming.png-dark
    • ClipboardTests.png-dark
    • ContentPresenter_Template.png-dark
    • ContentPresenter_Template.png
    • ImageIconPage.png-dark
    • ImageIconPage.png
    • Attributed_text_FontSize_Changing.png
    • DataTransferManager.png-dark
    • DataTransferManager.png

The merge gate on this change was circular: Uno.UI.HotDesign cannot be
compiled against Uno.WinRT.dll until a package containing it exists, and
no such package ships until this merges. Waiting for the dependent to move
first waits for something that cannot happen.

Disables the three Dotnet_Template_Tests_* jobs (12 matrix legs) so the
rename can land and produce the 7.0 packages HotDesign needs. Every
disabled item carries the greppable marker "TODO Uno (HotDesign 7.0)";
the restore checklist is in the spec.

The DevServer CLI jobs in the same file stay enabled -- they exercise the
host rather than compiling app code against the local build.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PbK9hM2hwovjr4GMj5sAFa

github-actions Bot commented Aug 24, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

MartinZikmund marked this pull request as ready for review August 24, 2026 11:27
MartinZikmund requested review from Xiaoy312 and ramezgerges and a lite review from Copilot August 24, 2026 11:27

github-actions Bot commented Aug 24, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude encountered an error after 0s —— View job


I'll analyze this and get back to you.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Pull request overview

This PR completes the Uno.dll → Uno.WinRT.dll assembly-identity rename for the WinRT layer and updates the repo’s build, packaging, runtime string lookups, and test infrastructure to reference the new assembly name.

Changes:

  • Renames the WinRT layer assembly output to Uno.WinRT across all Uno.WinRT.* variants (Skia/Wasm/Reference/netcoremobile) and updates Android AndroidResgenNamespace.
  • Updates string-literal assembly references used at runtime/trimming/build-time (WASM getAssemblyExports, LinkerDefinition.Wasm.xml, InternalsVisibleTo, source generator tooling).
  • Adjusts packaging (Uno.WinRT.nuspec), PackageDiff ignore rules, and temporarily disables template test jobs / narrows template feature overrides while downstream packages catch up.

Process note: the PR description’s issue reference (closes unoplatform/uno-private#2137) is not a fully-qualified public GitHub issue URL; it should be updated to a full https://github.com/.../issues/... link (or replaced with the repo’s “no related issue” note if this is internal maintenance).

Reviewed changes

Copilot reviewed 31 out of 31 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/Uno.WinRT/Uno.WinRT.Wasm.csproj Changes AssemblyName to Uno.WinRT for WASM output.
src/Uno.WinRT/Uno.WinRT.Skia.csproj Changes AssemblyName to Uno.WinRT for Skia output.
src/Uno.WinRT/Uno.WinRT.Reference.csproj Changes AssemblyName to Uno.WinRT for reference output.
src/Uno.WinRT/Uno.WinRT.netcoremobile.csproj Changes AssemblyName to Uno.WinRT and updates AndroidResgenNamespace.
src/Uno.WinRT/ts/Windows/ApplicationModel/Core/CoreApplication.ts Updates WASM runtime export lookup to getAssemblyExports("Uno.WinRT").
src/Uno.WinRT/Helpers/DispatcherTimerProxy.cs Updates comment to reference Uno.WinRT.dll.
src/Uno.WinRT/ApplicationModel/DataTransfer/DragDrop/Core/CoreDragDropManager.cs Updates comment to reflect new assembly identity.
src/Uno.WinRT/ApplicationModel/Core/CoreApplication.cs Updates comment to reflect new assembly identity.
src/Uno.WinAppSDKSyncGenerator/Generator.cs Updates expected compilation reference name from Uno to Uno.WinRT.
src/Uno.UI/LinkerDefinition.Wasm.xml Updates linker descriptor to refer to assembly Uno.WinRT.
src/Uno.UI/Extensions/ViewHelper.cs Updates TODO comments referencing the old Uno.dll name.
src/Uno.UI.XamlHost/Properties/AssemblyInfo.cs Updates InternalsVisibleTo target from Uno to Uno.WinRT.
src/Uno.UI.RuntimeTests/Tests/Windows_Graphics/Given_DisplayInformation_WindowIdMap.cs Updates test comment for the new assembly name on Android loads.
src/Uno.UI.RuntimeTests/Tests/AssemblyLoadContext/TestAssemblyLoadContext.cs Removes special-casing for Uno exact assembly name (now expects Uno.*).
src/Uno.UI.FluentTheme/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/Uno.UI.Dispatching/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/Uno.Foundation/Uno.Core.Extensions/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/Uno.Foundation/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/Uno.Foundation.Runtime.WebAssembly/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/Uno.Foundation.Logging/AssemblyInfo.cs Updates InternalsVisibleTo target to Uno.WinRT.
src/SourceGenerators/Uno.UI.Tasks/RuntimeAssetsSelector/RuntimeAssetsSelectorTask.cs Updates WinRT assembly identification to uno.winrt.
src/SourceGenerators/Uno.UI.SourceGenerators.Tests/XamlCodeGeneratorTests/Verifiers/CSGenerator.cs Removes Uno.dll metadata refs from pre-7.0 packages to avoid duplicate Windows.* types.
src/SourceGenerators/Uno.UI.SourceGenerators.Tests/UnoAssemblyHelper.cs Updates expected WinRT assembly filename to Uno.WinRT.dll.
src/SamplesApp/SamplesApp.Skia.Generic/SamplesApp.Skia.Generic.csproj Updates hard-coded WinRT output file paths to Uno.WinRT.dll.
src/AddIns/Uno.UI.Foldable/ViewHelper.cs Updates TODO comment referencing Uno.dll.
specs/058-winrt-assembly-rename/spec.md Adds a spec documenting sequencing, risks, and the restore checklist.
build/test-scripts/run-netcore-mobile-template-tests.ps1 Adds UnoDisableHotDesign workaround and narrows feature set temporarily.
build/test-scripts/run-net7-template-linux.ps1 Adds UnoDisableHotDesign workaround temporarily.
build/PackageDiffIgnore.xml Adds assembly-level ignore entry for the Uno → Uno.WinRT rename and updates related reasons.
build/nuget/Uno.WinRT.nuspec Packs Uno.WinRT.dll/.pdb instead of Uno.dll/.pdb across TFMs.
build/ci/tests/.azure-devops-tests-templates.yml Temporarily disables template test jobs pending downstream rebuilds.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24104/wasm-skia-net9/index.html

Copy link
Copy Markdown
Contributor

🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24104/docs/index.html

Copy link
Copy Markdown
Contributor

The build 229730 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 174

Details
  • skia-linux-screenshots: 73 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • CalendarView_Theming.png-dark
    • ButtonClippingTestsControl.png-dark
    • ClipboardTests.png-dark
    • ClipboardTests.png
    • Gamepad_CurrentReading.png-dark
    • ExpanderColorValidationPage.png-dark
    • Gamepad_CurrentReading.png
    • ExpanderColorValidationPage.png
    • Gamepad_Enumeration.png-dark
    • DynamicFont.png
    • ImageBrushInList.png-dark
    • ImageBrushInList.png
    • Buttons.png
    • Attributed_text_FontSize_Changing.png
    • Examples.png
    • ImageBrush_Stretch.png
    • ContentControl_Inheritance.png
    • ButtonClippingTestsControl.png
    • ImageIconPage.png-dark
    • ImageIconPage.png
  • skia-windows-screenshots: 174 changed over 2368

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • BitmapImage_vs_SvgImageSource.png-dark
    • ContentPresenter_Template.png-dark
    • ContentPresenter_Template.png
    • DataTransferManager.png-dark
    • DataTransferManager.png
    • Attributed_text_FontSize_Changing.png
    • ButtonClippingTestsControl.png
    • Buttons.png-dark
    • ExpanderColorValidationPage.png-dark
    • EllipsemaskingEllipseGrid.png-dark
    • Focus_FocusVisual_Properties.png-dark
    • Focus_FocusVisual_Properties.png
    • Focus_FocusState.png-dark
    • Focus_FocusState.png
    • Image_Stretch_Algmnt_Inf_Horizontal.png-dark
    • ImageSourceUrlMsAppDataScheme.png-dark
    • Image_Stretch_Algmnt_Inf_Horizontal.png
    • ImageSourceUrlMsAppDataScheme.png
    • Contacts_Pick.png-dark
    • Contacts_Pick.png

RealAppLaunchIntegrationTests scaffolds MyApp with `dotnet new unoapp`
from the published Uno.Templates, so the app output carries the pre-7.0
Uno.dll, then overwrites Uno.UI.RemoteControl.dll with the local build,
which now references Uno.WinRT. The app builds and launches, but the
RemoteControl client cannot resolve Uno.WinRT and never connects, so the
app-launch/connected telemetry event is never emitted.

Deterministic, not flaky: it failed on every CI run of this branch since
2026-08-20 and passes on feature/breakingchanges. Copying Uno.WinRT.dll
into the app output only moves the failure, since the package's Uno.UI.dll
still binds Windows.* to Uno.dll. The harness has to scaffold against 7.0
packages, which is the same restore condition as the template tests.

Also renames the restore marker to "TODO Uno (7.0 dependents)", which
covers both this and the HotDesign-blocked template jobs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PbK9hM2hwovjr4GMj5sAFa

github-actions Bot commented Aug 24, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Claude finished @MartinZikmund's task in 2m 26s —— View job


Code Review

  • Gather PR diff and context
  • Verify previously flagged issues are resolved (PackageDiffIgnore, CoreApplication.cs comment)
  • Review Copilot finding on RuntimeAssetsSelectorTask.cs:261
  • Review remaining changed files for new issues
  • Post inline findings
  • Write summary

Summary

Both blocking findings from prior reviews are resolved in 06fbfd96:

Finding Status
PackageDiffIgnore.xml historical 4.4.20 / 4.5 IgnoreSets had Uno.UWP.Resource → Uno.WinRT.Resource Fixed — reverted to Uno.UWP.Resource at lines 228, 238, 248, 351, 361, 371
CoreApplication.cs:103 comment "in non Uno.WinRT" Fixed — now reads "outside Uno.WinRT"

1 new nit posted inline — the comment at RuntimeAssetsSelectorTask.cs:261 still says (Uno.UWP) while the code on the next line already uses "uno.winrt". This is cosmetic and does not block merge.

Cross-cutting observations (no line anchor):

  • The [Ignore] test in RealAppLaunchIntegrationTests.cs is correctly explained and tracked — acknowledged gap while downstream packages haven't shipped 7.0 builds yet.
  • The 6.6 <Assemblies> entry (fullName="Uno" reason="Assembly renamed Uno -> Uno.WinRT") correctly blankets all type-level removal warnings for the rename.
  • The $sdkFeatures=Svg-only narrowing in run-netcore-mobile-template-tests.ps1 remains a deliberate, well-commented temporary trade-off — follow-up tracked as TODO Uno (HotDesign 7.0).

Verdict: ship — the rename is mechanically thorough, all previously blocking issues are resolved, and the one remaining nit is purely cosmetic.

Copy link
Copy Markdown
Contributor

🤖 Your WebAssembly Skia Sample App stage site is ready! Visit it here: https://unowasmprstaging.z20.web.core.windows.net/pr-24104/wasm-skia-net9/index.html

Copy link
Copy Markdown
Contributor

🤖 Your Docs stage site is ready! Visit it here: https://unodocsprstaging.z13.web.core.windows.net/pr-24104/docs/index.html

Copy link
Copy Markdown
Contributor

The build 229784 found UI Test snapshots differences: skia-linux-screenshots: 73, skia-windows-screenshots: 177

Details
  • skia-linux-screenshots: 73 changed over 2366

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • Buttons.png
    • ClipboardTests.png-dark
    • ClipboardTests.png
    • Focus_FocusVisual_Properties.png-dark
    • ContextRequested.png-dark
    • ButtonClippingTestsControl.png-dark
    • ButtonClippingTestsControl.png
    • Image_Margin_Large.png
    • ImageBrushInList.png-dark
    • ImageBrushInList.png
    • DynamicFont.png
    • Examples.png
    • ContentControl_Inheritance.png
    • ImageBrush_Stretch.png
    • DisplayInformation.png-dark
    • DisplayInformation.png
    • Gamepad_CurrentReading.png-dark
    • Gamepad_CurrentReading.png
    • Gamepad_Enumeration.png-dark
    • ImageIconPage.png-dark
  • skia-windows-screenshots: 177 changed over 2368

    🚨🚨 Comparison Details (first 20) 🚨🚨
    • BitmapImage_vs_SvgImageSource.png
    • ChatBox.png-dark
    • ChatBox.png
    • Attributed_text_FontSize_Changing.png-dark
    • GeolocatorPositionChanged.png-dark
    • GeolocatorPositionChanged.png
    • Battery.png
    • DropDownButtonPage.png-dark
    • EmailManagerTests.png-dark
    • EmailManagerTests.png
    • FocusManagerTest.png-dark
    • FocusManagerTest.png
    • Battery.png-dark
    • ExpanderColorValidationPage.png-dark
    • CalendarView_Theming.png-dark
    • CalendarView_Theming.png
    • Buttons.png-dark
    • DataTransferManager.png-dark
    • DataTransferManager.png
    • Focus_FocusVisual_Properties.png-dark

MartinZikmund merged commit 06190d3 into feature/breakingchanges Aug 24, 2026
55 checks passed
MartinZikmund deleted the dev/mazi/winrt-assembly branch August 24, 2026 17:57
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

Labels

area/automation Categorizes an issue or PR as relevant to project automation area/build Categorizes an issue or PR as relevant to build infrastructure area/code-generation Categorizes an issue or PR as relevant to code generation area/skia ✏️ Categorizes an issue or PR as relevant to Skia kind/documentation platform/android 🤖 Categorizes an issue or PR as relevant to the Android platform platform/ios 🍎 Categorizes an issue or PR as relevant to the iOS platform platform/macos 🍏 Categorizes an issue or PR as relevant to the macOS platform platform/wasm 🌐 Categorizes an issue or PR as relevant to the WebAssembly platform platform/x11 🐧 Categorizes an issue or PR as relevant to X11

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants


Back | FazBrowse Home | New Git URL