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));