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:
- 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.
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.
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
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.