Skip to content

Retarget to .NET Framework 4.8 and upgrade AvalonDock - #368

Merged
tgjones merged 2 commits into
tgjones:masterfrom
kornman00:kornman00-avalondock-net48-upgrade
Oct 4, 2026
Merged

tgjones merged 2 commits into
tgjones:masterfrom
kornman00:kornman00-avalondock-net48-upgrade

Conversation

@kornman00

Copy link
Copy Markdown
Contributor

Summary

Retarget Gemini's supported .NET Framework lane from net462 to net48, then upgrade the coherent AvalonDock engine and VS2013 theme pair from 4.60.0 to 4.74.1.

This follows the Caliburn.Micro 5 migration in #367. The target change is kept in a separate commit and validated while AvalonDock remains at 4.60.0, so framework-policy and docking-library observations remain independently attributable.

AvalonDock 4.74.1 retains Gemini's existing DockingManager, XML serializer, and Light/Dark/Blue resource integration while supplying native net48 and net10.0-windows7.0 assets.

Scope

  • retarget product, demo, module, test, CI, package-contract, and package-consumer lanes from net462 to net48;
  • upgrade Dirkster.AvalonDock.Themes.VS2013 and its engine dependency from 4.60.0 to 4.74.1;
  • require exact native AvalonDock compile/runtime assets for both retained targets;
  • add 31 docking, theme, and persistence characterization cases plus an immutable AvalonDock 4.60 layout fixture;
  • expand the package-only host to exercise DockingManager, XmlLayoutSerializer, VS2013 resources, and resolved assembly versions;
  • key local package-validation restores by package content so mutable working-tree packages cannot reuse stale cached dependencies;
  • document Framework retargeting, extension rebuild, state compatibility, and rollback requirements.

Intentionally unchanged:

  • Caliburn.Micro remains 5.0.258;
  • the Gemini persisted-state envelope and public docking integration remain unchanged;
  • no speculative Gemini production workaround is included because validation reproduced no Gemini regression;
  • AvalonDock 5 and unrelated dependency upgrades are out of scope;
  • publication authorization and release policy are unchanged.

Evidence

Revision Framework lane net10.0-windows Package gate
Accepted #367 base, AvalonDock 4.60 98/98 on net462 98/98 Passed
Retarget commit, AvalonDock 4.60 98/98 on net48 98/98 Passed
Final AvalonDock 4.74.1 commit 129/129 on net48 129/129 Passed
  • The exact final commit builds with zero warnings and zero errors.
  • The validator verifies eight primary packages, eight symbol packages, four shaders, exact dependency groups, coherent package versions, and native AvalonDock assets from lib/net48 and lib/net10.0-windows7.0.
  • The external host restores only from the locally packed Gemini family, then builds and runs against the expected docking, serialization, and theme APIs on both targets.
  • Complete state written with AvalonDock 4.60 imports into 4.74.1 on both targets with document/tool identity, selection, visibility, floating state, and repeated save/load behavior preserved.
  • Light, Dark, and Blue themes resolve and switch on both targets.
  • Document open/close and tool show/hide/pin/auto-hide behavior pass on both targets.
  • Floating-window owner, taskbar, icon, minimize/maximize/restore, and clean-exit behavior pass on both targets.
  • Genuine pointer drags display AvalonDock docking overlays and complete float-to-dock topology transitions on both targets.
  • Floating panes move between 100% and 125% displays with the expected scaled bounds.

Physical monitor removal was not performed because it changes system-wide display topology. Mixed-scale display movement was validated without changing the configured monitors.

Validation

  • dotnet restore src\Gemini.sln --configfile src\NuGet.config --force-evaluate --no-cache
  • dotnet build src\Gemini.sln --configuration Release --no-restore
  • dotnet test --project src\Gemini.Tests\Gemini.Tests.csproj --configuration Release --framework net48 --no-build --no-restore
  • dotnet test --project src\Gemini.Tests\Gemini.Tests.csproj --configuration Release --framework net10.0-windows --no-build --no-restore
  • dotnet pack src\Gemini.sln --configuration Release --no-build --no-restore --output build\packages
  • pwsh -NoProfile -File eng\validate-artifacts.ps1
  • isolated old-state import, theme, document/tool, floating-window, mixed-display, and pointer-drag checks on both Gemini.Demo targets

Base and rollback

Based on tgjones/gemini:master at 8b75be3d4a24384447b9ed89130ab9d32a2aed92, the accepted merge commit for #367.

The branch contains two focused commits above that base: the net48 retarget while retaining AvalonDock 4.60, followed by the AvalonDock 4.74.1 upgrade and its validation coverage.

Framework applications and extensions must retarget to .NET Framework 4.8. AvalonDock's assembly version changes from 4.60.0.0 to 4.74.1.0, so extensions referencing AvalonDock directly must be rebuilt and tested.

Operational rollback requires the matching previous Gemini application, module, extension, and dependency binaries together with the complete previous state file. The trailing AvalonDock XML alone is not a complete rollback artifact.

kornman00 and others added 2 commits October 3, 2026 02:26
Replace the net462 build, test, package, and external consumer lane with net48 while retaining net10. Update the support contract and migration guidance without changing dependency versions.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add AD4 docking, theme, and persistence coverage; validate exact native package assets; and exercise the package-only compatibility host against the upgraded engine and theme pair.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@kornman00

Copy link
Copy Markdown
Contributor Author

AvalonDock 5 only has support for net48/net9/net10. The 1.1.0-beta line was introduced in PR #367 and dropped net6/7 support. I'm continuing with this beta version line for framework alignments as well as the significant dependency updates.

@tgjones
tgjones merged commit 15cdb9a into tgjones:master Oct 4, 2026
2 checks passed
@kornman00
kornman00 deleted the kornman00-avalondock-net48-upgrade branch October 14, 2026 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants