using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyModel; using Microsoft.Extensions.DependencyModel.Resolution; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.Loader; using ZRB.Blog.Configurations;
staticAssemblyLoader() { AssemblyLoadContext.Default.Resolving += Default_Resolving; AssemblyResolver = new CompositeCompilationAssemblyResolver( new ICompilationAssemblyResolver[]{ new AppBaseCompilationAssemblyResolver(AppDomain.CurrentDomain.BaseDirectory), new ReferenceAssemblyPathResolver(), new PackageCompilationAssemblyResolver() }); DependencyDLL = new ConcurrentDictionary<string, CompilationLibrary>(); }
privatestatic Assembly Default_Resolving(AssemblyLoadContext assemblyLoadContext, AssemblyName assemblyName) { if(DependencyDLL.ContainsKey(assemblyName.Name)) { var compilationLibrary = DependencyDLL[assemblyName.Name]; var assemblies = new List<string>(); if (AssemblyResolver.TryResolveAssemblyPaths(compilationLibrary, assemblies) && assemblies.Count > 0) { var assembly = assemblyLoadContext.LoadFromAssemblyPath(assemblies[0]); FindDependency(assembly); return assembly; } } returnnull;