From ac7826898a01c0749280b491a1da44ed25d6e954 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Sat, 20 Dec 2025 16:08:16 +0100 Subject: [PATCH] Check "Does Not Support Unloading" tag to not use AssemblyLoadContext --- src/DesktopMagic/Plugins/PluginMetadata.cs | 5 +++++ src/DesktopMagic/Plugins/PluginWindow.xaml.cs | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/DesktopMagic/Plugins/PluginMetadata.cs b/src/DesktopMagic/Plugins/PluginMetadata.cs index 00d64c4..6c799ae 100644 --- a/src/DesktopMagic/Plugins/PluginMetadata.cs +++ b/src/DesktopMagic/Plugins/PluginMetadata.cs @@ -1,6 +1,8 @@ using Modio.Models; using System; +using System.Collections.Generic; +using System.Linq; using System.Text.Json.Serialization; namespace DesktopMagic.Plugins; @@ -27,6 +29,8 @@ public class PluginMetadata public string? Version { get; set; } + public List Tags { get; set; } = []; + public PluginMetadata(Mod mod) { Name = mod.Name ?? mod.Id.ToString(); @@ -39,6 +43,7 @@ public class PluginMetadata Description = mod.DescriptionPlaintext; Summary = mod.Summary; Version = mod.Modfile?.Version; + Tags = mod.Tags.Select(t => t.Name).Where(t => t is not null).ToList()!; } public PluginMetadata(string name, uint id) diff --git a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs index 9cfc86c..f064020 100644 --- a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs +++ b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs @@ -216,10 +216,19 @@ public partial class PluginWindow : Window object? instance = pluginClassInstance; if (instance is null) { - byte[] assemblyData = File.ReadAllBytes($"{PluginFolderPath}\\main.dll"); - using MemoryStream assemblyStream = new(assemblyData); + Assembly dll; - Assembly dll = assemblyLoadContext.LoadFromStream(assemblyStream); + if (PluginMetadata.Tags.Contains("Does Not Support Unloading")) + { + dll = Assembly.LoadFrom($"{PluginFolderPath}\\main.dll"); + } + else + { + byte[] assemblyData = File.ReadAllBytes($"{PluginFolderPath}\\main.dll"); + using MemoryStream assemblyStream = new(assemblyData); + + dll = assemblyLoadContext.LoadFromStream(assemblyStream); + } Type? instanceType = Array.Find(dll.GetTypes(), type => type.GetTypeInfo().BaseType == typeof(Plugin));