.NET MAUI

How to solve “System.TypeInitializationException: ‘The type initializer for ‘WinRT.ActivationFactory`1’ threw an exception.'” in the MAUI application?

This post was most recently updated on July 18th, 2024.

2 min read.

… or “How to bang your head on a wall for hours on end when developing a MAUI application?” 😂

This article explains how to fix a surprising error you might get when trying to run a MAUI app in Windows. For me, it was thrown when I was simply reading a file from the disk, but I suspect the same or similar error (“System.TypeInitializationException: ‘The type initializer for ‘WinRT.ActivationFactory`1′ threw an exception.’ – COMException: ClassFactory cannot supply requested class”) can probably be thrown for other reasons as well.

Anyway – let’s take a closer look at the issue and when it was thrown for me, shall we?

Problem

The error gets thrown at perhaps the unlikeliest part of your code ever. When you’re reading a file with System.IO.File on Windows. Like – shouldn’t System.IO stuff work in platform-specific MAUI builds? And it works just fine on Android. But on Windows, this code throws:

using Stream fileStream = System.IO.File.OpenRead(filePath);
using StreamReader reader = new StreamReader(fileStream);
var c = await reader.ReadToEndAsync();

And the error you get is a pretty drastic one:

System.TypeInitializationException: 'The type initializer for 'WinRT.ActivationFactory`1' threw an exception.'

COMException: ClassFactory cannot supply requested class

Perhaps you can get similar errors for different reasons, too. But I suspect the fix might quite often be the same, as far as you’re trying to build stuff with MAUI.

Okay – so what to do to fix the issue at hand?

Solution

Annoying, but I haven’t found the proper fix to this. That’s not to say I wouldn’t have got a pretty good set of workarounds documented below for trying out! 😁

Time needed: 30 minutes

Solving “System.TypeInitializationException: ‘The type initializer for ‘WinRT.ActivationFactory`1’ threw an exception.'” in MAUI app?

  1. Restart Visual Studio

    Boring, but it’s a good idea to start by restarting Visual Studio.

  2. Restart your machine

    Even more boring, but restarting your machine is the next step. I had to restart mine before the next steps actually worked.

    So since you’ll probably need to do this anyway, probably a good idea to try it first before trying the long-running commands in steps 3 & 4.

    Come back when you’re done!

  3. Disable packaging in Windows to avoid unnecessary broken dependencies

    In case you’re missing the following property in your project’s .csproj file’s <PropertyGroup> node, you could try adding it (unless you want to publish an appx package, and I don’t think anyone does?)

    <WindowsPackageType>None</WindowsPackageType>

    I haven’t verified this works, as it was suggested by a reader – thanks for the contribution, @takipsizad!

  4. Repair .NET workloads

    The following command – run in Visual Studio Developer Shell (or in any other shell, really) – should fix your workloads if they’re broken for whatever reason. I suppose this should’ve fixed the issue for me, but it didn’t.

    dotnet workload repair

  5. Reinstall maui-windows workload

    Maybe just your maui-windows .NET workload has broken. And maybe workload repair didn’t fix it for whatever reason. Who knows – it’s easy enough to try just reinstalling maui-windows – and somehow this one finally fixed the issue for me:

    dotnet workload install maui-windows

Hope this helps! If you’ve figured out other ways to fix this, let me know in the comments section below!

References

A couple of sources I found useful in the investigation:

mm
0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments