fix metadata reading
This commit is contained in:
@@ -1,20 +1,24 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using dnlib.DotNet;
|
using dnlib.DotNet;
|
||||||
|
using NuGet.Versioning;
|
||||||
|
|
||||||
namespace CringePlugins.Loader;
|
namespace CringePlugins.Loader;
|
||||||
|
|
||||||
public record PluginMetadata(string Name, Version Version)
|
public record PluginMetadata(string Name, NuGetVersion Version)
|
||||||
{
|
{
|
||||||
public static PluginMetadata ReadFromEntrypoint(string entrypointPath)
|
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 titleAttribute = assembly.CustomAttributes.Find(typeof(AssemblyTitleAttribute).FullName);
|
||||||
var versionAttribute = module.CustomAttributes.Find(typeof(AssemblyVersionAttribute).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;
|
var name = titleAttribute?.ConstructorArguments[0].Value as UTF8String ?? assembly.Name;
|
||||||
if (!Version.TryParse(versionAttribute?.ConstructorArguments[0].Value as string ?? "0.0.0.0", out var version))
|
if (!NuGetVersion.TryParse(
|
||||||
version = new();
|
(versionAttribute ?? fileVersionAttribute)?.ConstructorArguments[0].Value as UTF8String ?? "0.0.0.0",
|
||||||
|
out var version))
|
||||||
|
version = new(0, 0, 0, 0);
|
||||||
|
|
||||||
return new(name, version);
|
return new(name, version);
|
||||||
}
|
}
|
||||||
|
@@ -108,7 +108,7 @@ public class PluginsLifetime : ILoadingStage
|
|||||||
await using (var stream = File.Create(Path.Join(dir, $"{package.Package.Id}.deps.json")))
|
await using (var stream = File.Create(Path.Join(dir, $"{package.Package.Id}.deps.json")))
|
||||||
await manifestBuilder.WriteDependencyManifestAsync(stream, package.Entry, _runtimeFramework);
|
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();
|
_plugins = plugins.ToImmutable();
|
||||||
@@ -132,11 +132,11 @@ public class PluginsLifetime : ILoadingStage
|
|||||||
_plugins = plugins.ToImmutable();
|
_plugins = plugins.ToImmutable();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void LoadComponent(ImmutableArray<PluginInstance>.Builder plugins, string path)
|
private static void LoadComponent(ImmutableArray<PluginInstance>.Builder plugins, string path, PluginMetadata? metadata = null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
plugins.Add(new PluginInstance(path));
|
plugins.Add(metadata is null ? new PluginInstance(path) : new(metadata, path));
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user