WPF using .NET Core & Orc.Theming
For the last few months, we at WildGums been working hard on preparing our migration for all our WPF apps from .NET 4.6.2
to .NET Core 3.1
. This required lots of planning and testing, since the following parts needed to be taken into account:
- Catel
- Our 40+ open source components
- Our 10+ internal components
- Our 2+ open source apps
- Our 10+ internal apps
But today is the day we believe we are ready and we will start releasing all open source components as stable.
Theming
We used to have our own “theming” capabilities in Orchestra. Thanks to the hard work from Bastian Schmidt and Jan Karger on ControlzEx, we were able to much improve the theming capabilities of our open-source libraries.
We created Orc.Theming, on top of ControlzEx, and now provide (both light and dark) styles for all most-used WPF controls out of the box.
This also gave us the opportunity to go through all our components and make sure they look great in both light and dark mode.
Extensions
One of the challenges we faced while migrating to .NET Core was the use of extensions. Orc.Extensibility, the component that focuses on extensibility, heavily relied on reflection-only loading of assemblies to inspect whether they could / should be loaded as an extension.
The component is rewritten to use Assembly Load Context (ACL) instead of reflection-only loading of assemblies and now supports .NET 4.6
/ .NET 4.7
/ .NET Core 3.1
.
Squirrel (installation & updates)
We use several deployment mechanisms for out applications:
- Inno Setup
- MSIX
- Squirrel
Since Squirrel cannot be directly referenced in a .NET Core project, we had to wrap update.exe
and parse the console output to make sure we kept the exact same behavior as before.
Open source apps migrated to .NET Core
We’ve migrated both LogViewer and CsvTextEditor (example open source apps) to .NET Core 3.1. These apps can be used to see how to deploy a self-contained WPF app using all WildGums controls.