public LibraryManager(FrameworkName targetFramework, string configuration, DependencyWalker dependencyWalker, ILibraryExportProvider libraryExportProvider) : this(targetFramework, configuration, GetLibraryInfoThunk(dependencyWalker), libraryExportProvider) { }
public LibraryManager(FrameworkName targetFramework, string configuration, Func <IEnumerable <ILibraryInformation> > libraryInfoThunk, ILibraryExportProvider libraryExportProvider) { _targetFramework = targetFramework; _configuration = configuration; _libraryInfoThunk = libraryInfoThunk; _libraryExportProvider = libraryExportProvider; }
public LibraryManager(FrameworkName targetFramework, string configuration, Func<IEnumerable<ILibraryInformation>> libraryInfoThunk, ILibraryExportProvider libraryExportProvider) { _targetFramework = targetFramework; _configuration = configuration; _libraryInfoThunk = libraryInfoThunk; _libraryExportProvider = libraryExportProvider; }
public static ILibraryExport GetExportsRecursive( ICache cache, ILibraryManager manager, ILibraryExportProvider libraryExportProvider, ILibraryKey target, bool dependenciesOnly) { return GetExportsRecursive(cache, manager, libraryExportProvider, target, libraryInformation => { if (dependenciesOnly) { return !string.Equals(target.Name, libraryInformation.Name); } return true; }); }
public static ILibraryExport GetExportsRecursive( ICache cache, ILibraryManager manager, ILibraryExportProvider libraryExportProvider, ILibraryKey target, bool dependenciesOnly) { return(GetExportsRecursive(cache, manager, libraryExportProvider, target, libraryInformation => { if (dependenciesOnly) { return !string.Equals(target.Name, libraryInformation.Name); } return true; })); }
public static ILibraryExport GetExportsRecursive( ILibraryManager manager, ILibraryExportProvider libraryExportProvider, string name, FrameworkName targetFramework, string configuration, bool dependenciesOnly) { var dependencyStopWatch = Stopwatch.StartNew(); Trace.TraceInformation("[{0}]: Resolving references for '{1}'", typeof(ProjectExportProviderHelper).Name, name); var references = new Dictionary <string, IMetadataReference>(StringComparer.OrdinalIgnoreCase); var sourceReferences = new Dictionary <string, ISourceReference>(StringComparer.OrdinalIgnoreCase); // Walk the dependency tree and resolve the library export for all references to this project var stack = new Queue <Node>(); var processed = new HashSet <string>(StringComparer.OrdinalIgnoreCase); var rootNode = new Node { Library = manager.GetLibraryInformation(name) }; stack.Enqueue(rootNode); while (stack.Count > 0) { var node = stack.Dequeue(); // Skip it if we've already seen it if (!processed.Add(node.Library.Name)) { continue; } bool isRoot = node.Parent == null; if (!dependenciesOnly || (dependenciesOnly && !isRoot)) { var libraryExport = libraryExportProvider.GetLibraryExport(node.Library.Name, targetFramework, configuration); if (libraryExport == null) { // TODO: Failed to resolve dependency so do something useful Trace.TraceInformation("[{0}]: Failed to resolve dependency '{1}'", typeof(ProjectExportProviderHelper).Name, node.Library.Name); } else { if (node.Parent == rootNode) { // Only export sources from first level dependencies ProcessExport(libraryExport, references, sourceReferences); } else { // Skip source exports from anything else ProcessExport(libraryExport, references, sourceReferences: null); } } } foreach (var dependency in node.Library.Dependencies) { var childNode = new Node { Library = manager.GetLibraryInformation(dependency), Parent = node }; stack.Enqueue(childNode); } } dependencyStopWatch.Stop(); Trace.TraceInformation("[{0}]: Resolved {1} references for '{2}' in {3}ms", typeof(ProjectExportProviderHelper).Name, references.Count, name, dependencyStopWatch.ElapsedMilliseconds); return(new LibraryExport( references.Values.ToList(), sourceReferences.Values.ToList())); }
public static ILibraryExport GetExportsRecursive( ICache cache, ILibraryManager manager, ILibraryExportProvider libraryExportProvider, ILibraryKey target, Func<ILibraryInformation, bool> include) { var dependencyStopWatch = Stopwatch.StartNew(); Logger.TraceInformation("[{0}]: Resolving references for '{1}' {2}", typeof(ProjectExportProviderHelper).Name, target.Name, target.Aspect); var references = new Dictionary<string, IMetadataReference>(StringComparer.OrdinalIgnoreCase); var sourceReferences = new Dictionary<string, ISourceReference>(StringComparer.OrdinalIgnoreCase); // Walk the dependency tree and resolve the library export for all references to this project var stack = new Queue<Node>(); var processed = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var rootNode = new Node { Library = manager.GetLibraryInformation(target.Name, target.Aspect) }; stack.Enqueue(rootNode); while (stack.Count > 0) { var node = stack.Dequeue(); // Skip it if we've already seen it if (!processed.Add(node.Library.Name)) { continue; } if (include(node.Library)) { var libraryExport = libraryExportProvider.GetLibraryExport(target .ChangeName(node.Library.Name) .ChangeAspect(null)); if (libraryExport != null) { if (node.Parent == rootNode) { // Only export sources from first level dependencies ProcessExport(cache, libraryExport, references, sourceReferences); } else { // Skip source exports from anything else ProcessExport(cache, libraryExport, references, sourceReferences: null); } } } foreach (var dependency in node.Library.Dependencies) { var childNode = new Node { Library = manager.GetLibraryInformation(dependency, null), Parent = node }; stack.Enqueue(childNode); } } dependencyStopWatch.Stop(); Logger.TraceInformation("[{0}]: Resolved {1} references for '{2}' in {3}ms", typeof(ProjectExportProviderHelper).Name, references.Count, target.Name, dependencyStopWatch.ElapsedMilliseconds); return new LibraryExport( references.Values.ToList(), sourceReferences.Values.ToList()); }
public static ILibraryExport GetExportsRecursive( ICache cache, ILibraryManager manager, ILibraryExportProvider libraryExportProvider, ILibraryKey target, Func <ILibraryInformation, bool> include) { var dependencyStopWatch = Stopwatch.StartNew(); Logger.TraceInformation("[{0}]: Resolving references for '{1}' {2}", typeof(ProjectExportProviderHelper).Name, target.Name, target.Aspect); var references = new Dictionary <string, IMetadataReference>(StringComparer.OrdinalIgnoreCase); var sourceReferences = new Dictionary <string, ISourceReference>(StringComparer.OrdinalIgnoreCase); // Walk the dependency tree and resolve the library export for all references to this project var queue = new Queue <Node>(); var processed = new HashSet <string>(StringComparer.OrdinalIgnoreCase); var rootNode = new Node { Library = manager.GetLibraryInformation(target.Name, target.Aspect) }; queue.Enqueue(rootNode); while (queue.Count > 0) { var node = queue.Dequeue(); // Skip it if we've already seen it if (!processed.Add(node.Library.Name)) { continue; } if (include(node.Library)) { var libraryExport = libraryExportProvider.GetLibraryExport(target .ChangeName(node.Library.Name) .ChangeAspect(null)); if (libraryExport != null) { if (node.Parent == rootNode) { // Only export sources from first level dependencies ProcessExport(cache, libraryExport, references, sourceReferences); } else { // Skip source exports from anything else ProcessExport(cache, libraryExport, references, sourceReferences: null); } } } foreach (var dependency in node.Library.Dependencies) { var childNode = new Node { Library = manager.GetLibraryInformation(dependency, null), Parent = node }; queue.Enqueue(childNode); } } dependencyStopWatch.Stop(); Logger.TraceInformation("[{0}]: Resolved {1} references for '{2}' in {3}ms", typeof(ProjectExportProviderHelper).Name, references.Count, target.Name, dependencyStopWatch.ElapsedMilliseconds); return(new LibraryExport( references.Values.ToList(), sourceReferences.Values.ToList())); }
public static ILibraryExport GetExportsRecursive( ILibraryManager manager, ILibraryExportProvider libraryExportProvider, string name, FrameworkName targetFramework, string configuration, bool dependenciesOnly) { var dependencyStopWatch = Stopwatch.StartNew(); Trace.TraceInformation("[{0}]: Resolving references for '{1}'", typeof(ProjectExportProviderHelper).Name, name); var references = new Dictionary<string, IMetadataReference>(StringComparer.OrdinalIgnoreCase); var sourceReferences = new Dictionary<string, ISourceReference>(StringComparer.OrdinalIgnoreCase); // Walk the dependency tree and resolve the library export for all references to this project var stack = new Queue<Node>(); var processed = new HashSet<string>(StringComparer.OrdinalIgnoreCase); var rootNode = new Node { Library = manager.GetLibraryInformation(name) }; stack.Enqueue(rootNode); while (stack.Count > 0) { var node = stack.Dequeue(); // Skip it if we've already seen it if (!processed.Add(node.Library.Name)) { continue; } bool isRoot = node.Parent == null; if (!dependenciesOnly || (dependenciesOnly && !isRoot)) { var libraryExport = libraryExportProvider.GetLibraryExport(node.Library.Name, targetFramework, configuration); if (libraryExport == null) { // TODO: Failed to resolve dependency so do something useful Trace.TraceInformation("[{0}]: Failed to resolve dependency '{1}'", typeof(ProjectExportProviderHelper).Name, node.Library.Name); } else { if (node.Parent == rootNode) { // Only export sources from first level dependencies ProcessExport(libraryExport, references, sourceReferences); } else { // Skip source exports from anything else ProcessExport(libraryExport, references, sourceReferences: null); } } } foreach (var dependency in node.Library.Dependencies) { var childNode = new Node { Library = manager.GetLibraryInformation(dependency), Parent = node }; stack.Enqueue(childNode); } } dependencyStopWatch.Stop(); Trace.TraceInformation("[{0}]: Resolved {1} references for '{2}' in {3}ms", typeof(ProjectExportProviderHelper).Name, references.Count, name, dependencyStopWatch.ElapsedMilliseconds); return new LibraryExport( references.Values.ToList(), sourceReferences.Values.ToList()); }