From b8af0ed2a73798e06e2fa1b6eaaa61ea3117f51d Mon Sep 17 00:00:00 2001 From: zznty <94796179+zznty@users.noreply.github.com> Date: Sun, 3 Nov 2024 03:16:39 +0700 Subject: [PATCH] fix metadata reading --- CringePlugins/Loader/PluginMetadata.cs | 18 +++++++++++------- CringePlugins/Loader/PluginsLifetime.cs | 6 +++--- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/CringePlugins/Loader/PluginMetadata.cs b/CringePlugins/Loader/PluginMetadata.cs index df9728f..dda683c 100644 --- a/CringePlugins/Loader/PluginMetadata.cs +++ b/CringePlugins/Loader/PluginMetadata.cs @@ -1,20 +1,24 @@ using System.Reflection; using dnlib.DotNet; +using NuGet.Versioning; namespace CringePlugins.Loader; -public record PluginMetadata(string Name, Version Version) +public record PluginMetadata(string Name, NuGetVersion Version) { public static PluginMetadata ReadFromEntrypoint(string entrypointPath) { - var module = ModuleDefMD.Load(entrypointPath); + var assembly = AssemblyDef.Load(entrypointPath); - var titleAttribute = module.CustomAttributes.Find(typeof(AssemblyTitleAttribute).FullName); - var versionAttribute = module.CustomAttributes.Find(typeof(AssemblyVersionAttribute).FullName); + var titleAttribute = assembly.CustomAttributes.Find(typeof(AssemblyTitleAttribute).FullName); + var versionAttribute = assembly.CustomAttributes.Find(typeof(AssemblyVersionAttribute).FullName); + var fileVersionAttribute = assembly.CustomAttributes.Find(typeof(AssemblyFileVersionAttribute).FullName); - var name = titleAttribute?.ConstructorArguments[0].Value as string ?? module.FullName; - if (!Version.TryParse(versionAttribute?.ConstructorArguments[0].Value as string ?? "0.0.0.0", out var version)) - version = new(); + var name = titleAttribute?.ConstructorArguments[0].Value as UTF8String ?? assembly.Name; + if (!NuGetVersion.TryParse( + (versionAttribute ?? fileVersionAttribute)?.ConstructorArguments[0].Value as UTF8String ?? "0.0.0.0", + out var version)) + version = new(0, 0, 0, 0); return new(name, version); } diff --git a/CringePlugins/Loader/PluginsLifetime.cs b/CringePlugins/Loader/PluginsLifetime.cs index 5df8483..c852a55 100644 --- a/CringePlugins/Loader/PluginsLifetime.cs +++ b/CringePlugins/Loader/PluginsLifetime.cs @@ -108,7 +108,7 @@ public class PluginsLifetime : ILoadingStage await using (var stream = File.Create(Path.Join(dir, $"{package.Package.Id}.deps.json"))) await manifestBuilder.WriteDependencyManifestAsync(stream, package.Entry, _runtimeFramework); - LoadComponent(plugins, Path.Join(dir, $"{package.Package.Id}.dll")); + LoadComponent(plugins, Path.Join(dir, $"{package.Package.Id}.dll"), new(package.Package.Id, package.Package.Version)); } _plugins = plugins.ToImmutable(); @@ -132,11 +132,11 @@ public class PluginsLifetime : ILoadingStage _plugins = plugins.ToImmutable(); } - private static void LoadComponent(ImmutableArray.Builder plugins, string path) + private static void LoadComponent(ImmutableArray.Builder plugins, string path, PluginMetadata? metadata = null) { try { - plugins.Add(new PluginInstance(path)); + plugins.Add(metadata is null ? new PluginInstance(path) : new(metadata, path)); } catch (Exception e) {