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:

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.

Dynamic theme switching

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.

Orc.Extensibility example app

Squirrel (installation & updates)

We use several deployment mechanisms for out applications:

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.

Orc.Squirrel app launcher

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.

LogViewer running WPF using .NET Core 3.1