protected virtual Assembly LoadResolverAssembly(string resolverPath, LoggingContext loggingContext, ElementLocation location) { #if !FEATURE_ASSEMBLYLOADCONTEXT return(Assembly.LoadFrom(resolverPath)); #else return(_loader.LoadFromPath(resolverPath)); #endif }
protected virtual Assembly LoadResolverAssembly(string resolverPath, LoggingContext loggingContext, ElementLocation location) { #if FEATURE_ASSEMBLY_LOADFROM return(Assembly.LoadFrom(resolverPath)); #else _loader.AddDependencyLocation(Path.GetDirectoryName(resolverPath)); return(_loader.LoadFromPath(resolverPath)); #endif }
internal virtual IList <SdkResolver> LoadResolvers(ILoggingService logger, BuildEventContext buildEventContext, ElementLocation location) { // Always add the default resolver var resolvers = new List <SdkResolver> { new DefaultSdkResolver() }; var potentialResolvers = FindPotentialSdkResolvers( Path.Combine(BuildEnvironmentHelper.Instance.MSBuildToolsDirectory32, "SdkResolvers")); if (potentialResolvers.Count == 0) { return(resolvers); } #if !FEATURE_ASSEMBLY_LOADFROM var loader = new CoreClrAssemblyLoader(); #endif foreach (var potentialResolver in potentialResolvers) { try { #if FEATURE_ASSEMBLY_LOADFROM var assembly = Assembly.LoadFrom(potentialResolver); #else loader.AddDependencyLocation(Path.GetDirectoryName(potentialResolver)); Assembly assembly = loader.LoadFromPath(potentialResolver); #endif resolvers.AddRange(assembly.ExportedTypes .Select(type => new { type, info = type.GetTypeInfo() }) .Where(t => t.info.IsClass && t.info.IsPublic && typeof(SdkResolver).IsAssignableFrom(t.type)) .Select(t => (SdkResolver)Activator.CreateInstance(t.type))); } catch (Exception e) { logger.LogWarning(buildEventContext, string.Empty, new BuildEventFileInfo(location), "CouldNotLoadSdkResolver", e.Message); } } return(resolvers.OrderBy(t => t.Priority).ToList()); }