protected virtual ValueOrProceed <AssemblyFromStrategy> LoadDependencyFromLocalDisk(string directory, string assemblyFileName) { var dependency = this.fileSystemUtilities.ReadDependencyFileFromDisk(directory, assemblyFileName); if (dependency == null) { return(ValueOrProceed <AssemblyFromStrategy> .Proceed()); } return(ValueOrProceed <AssemblyFromStrategy> .FromValue(AssemblyFromStrategy.Releasable(Assembly.Load(this.fileSystemUtilities.ToByteArray(dependency))), false)); }
// <summary> /// This override includes the netcore 3.0 resolver /// </summary> /// <param name="assemblyName"></param> /// <returns></returns> protected ValueOrProceed <AssemblyFromStrategy> LoadFromDependencyContext(string initialPluginLoadDirectory, AssemblyName assemblyName) { var assemblyPath = this.resolver.ResolveAssemblyToPath(assemblyName); if (!String.IsNullOrEmpty(assemblyPath) && this.fileSystemUtilities.DoesFileExist(assemblyPath)) { return(ValueOrProceed <AssemblyFromStrategy> .FromValue(AssemblyFromStrategy.Releasable(LoadFromAssemblyPath(assemblyPath)), false)); } if (IsResourceAssembly(assemblyName)) { foreach (var resourceDependency in this.pluginDependencyContext.PluginResourceDependencies) { var resourcePath = Path.Combine(resourceDependency.Path, assemblyName.CultureName, assemblyName.Name + ".dll"); if (this.fileSystemUtilities.DoesFileExist(resourcePath)) { return(ValueOrProceed <AssemblyFromStrategy> .FromValue(AssemblyFromStrategy.Releasable(LoadFromAssemblyPath(resourcePath)), false)); } } // Do not proceed probing return(ValueOrProceed <AssemblyFromStrategy> .FromValue(null, false)); } var pluginDependency = this.pluginDependencyContext.PluginDependencies.FirstOrDefault(d => d.DependencyNameWithoutExtension == assemblyName.Name); if (pluginDependency != null) { var dependency = this.pluginDependencyResolver.ResolvePluginDependencyToPath(initialPluginLoadDirectory, pluginDependency, this.pluginDependencyContext.AdditionalProbingPaths); if (dependency != null) { return(ValueOrProceed <AssemblyFromStrategy> .FromValue(AssemblyFromStrategy.Releasable(LoadFromStream(dependency)), false)); } } var localFile = Path.Combine(initialPluginLoadDirectory, assemblyName.Name + ".dll"); if (this.fileSystemUtilities.DoesFileExist(localFile)) { return(ValueOrProceed <AssemblyFromStrategy> .FromValue(AssemblyFromStrategy.Releasable(LoadFromAssemblyPath(localFile)), false)); } return(ValueOrProceed <AssemblyFromStrategy> .Proceed()); }