You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
947 B
34 lines
947 B
2 years ago
|
using System.Reflection;
|
||
|
using System.Runtime.Loader;
|
||
|
|
||
|
namespace Emby.Server.Implementations.Plugins;
|
||
|
|
||
|
/// <summary>
|
||
|
/// A custom <see cref="AssemblyLoadContext"/> for loading Jellyfin plugins.
|
||
|
/// </summary>
|
||
|
public class PluginLoadContext : AssemblyLoadContext
|
||
|
{
|
||
|
private readonly AssemblyDependencyResolver _resolver;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Initializes a new instance of the <see cref="PluginLoadContext"/> class.
|
||
|
/// </summary>
|
||
|
/// <param name="path">The path of the plugin assembly.</param>
|
||
|
public PluginLoadContext(string path) : base(true)
|
||
|
{
|
||
|
_resolver = new AssemblyDependencyResolver(path);
|
||
|
}
|
||
|
|
||
|
/// <inheritdoc />
|
||
|
protected override Assembly? Load(AssemblyName assemblyName)
|
||
|
{
|
||
|
var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);
|
||
|
if (assemblyPath is not null)
|
||
|
{
|
||
|
return LoadFromAssemblyPath(assemblyPath);
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
}
|