static AssemblyLoadContext CreateLoadContext(string baseDir, string assemblyFile) { var depsJsonFile = Path.Combine(baseDir, Path.GetFileNameWithoutExtension(assemblyFile) + ".deps.json"); var builder = new AssemblyLoadContextBuilder(); builder.TryAddDependencyContext(depsJsonFile, out _); builder.SetBaseDirectory(baseDir); return(builder.Build()); }
public static AssemblyLoadContextBuilder AddDependencyContext(this AssemblyLoadContextBuilder builder, string depsFilePath) { var reader = new DependencyContextJsonReader(); using (var file = File.OpenRead(depsFilePath)) { var deps = reader.Read(file); builder.SetBaseDirectory(Path.GetDirectoryName(depsFilePath)); builder.AddDependencyContext(deps); } return(builder); }
public static AssemblyLoadContextBuilder TryAddDependencyContext(this AssemblyLoadContextBuilder builder, string depsFilePath, out Exception error) { error = null; try { builder.AddDependencyContext(depsFilePath); } catch (Exception ex) { error = ex; } return(builder); }
public static AssemblyLoadContextBuilder AddDependencyContext(this AssemblyLoadContextBuilder builder, DependencyContext dependencyContext) { var ridGraph = dependencyContext.RuntimeGraph.Any() ? dependencyContext.RuntimeGraph : DependencyContext.Default.RuntimeGraph; var rid = Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.GetRuntimeIdentifier(); var fallbackRid = GetFallbackRid(); var fallbackGraph = ridGraph.FirstOrDefault(g => g.Runtime == rid) ?? ridGraph.FirstOrDefault(g => g.Runtime == fallbackRid) ?? new RuntimeFallbacks("any"); foreach (var managed in dependencyContext.ResolveRuntimeAssemblies(fallbackGraph)) { builder.AddManagedLibrary(managed); } foreach (var native in dependencyContext.ResolveNativeAssets(fallbackGraph)) { builder.AddNativeLibrary(native); } return(builder); }