ExtensionAssemblyLoadContext.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.Reflection;
  2. using System.Runtime.Loader;
  3. namespace PixiEditor.DevTools.CsharpCoding;
  4. internal class ExtensionAssemblyLoadContext : System.Runtime.Loader.AssemblyLoadContext
  5. {
  6. public string AssembliesPath { get; set; }
  7. public ExtensionAssemblyLoadContext(string assembliesPath) : base(true)
  8. {
  9. AssembliesPath = assembliesPath;
  10. Resolving += OnResolving;
  11. }
  12. private Assembly? OnResolving(AssemblyLoadContext context, AssemblyName name)
  13. {
  14. string? assemblyFileName = $"{name.Name}.dll";
  15. string? assemblyPath = Path.Combine(AssembliesPath, assemblyFileName);
  16. if (File.Exists(assemblyPath))
  17. {
  18. if (name.Name.StartsWith("PixiEditor"))
  19. {
  20. // load from base context
  21. return null;
  22. }
  23. return context.LoadFromAssemblyPath(assemblyPath);
  24. }
  25. return null;
  26. }
  27. protected override Assembly? Load(AssemblyName assemblyName)
  28. {
  29. return null;
  30. }
  31. }