public ReferenceResolver(IReadOnlyList <string> targetAssemblies, IReadOnlyList <AssemblyItem> assemblyItems) { _mvcAssemblies = new HashSet <string>(targetAssemblies, StringComparer.Ordinal); foreach (var item in assemblyItems) { var classifiedItem = new ClassifiedAssemblyItem(item); _lookup[item.AssemblyName] = classifiedItem; } }
private DependencyClassification Resolve(ClassifiedAssemblyItem classifiedItem) { if (classifiedItem.DependencyClassification != DependencyClassification.Unknown) { return(classifiedItem.DependencyClassification); } if (classifiedItem.AssemblyItem == null) { // We encountered a dependency that isn't part of this assembly's dependency set. We'll see if it happens to be an MVC assembly. // This might be useful in scenarios where the app does not have a framework reference at the entry point, // but the transitive dependency does. classifiedItem.DependencyClassification = _mvcAssemblies.Contains(classifiedItem.Name) ? DependencyClassification.MvcReference : DependencyClassification.DoesNotReferenceMvc; return(classifiedItem.DependencyClassification); } if (classifiedItem.AssemblyItem.IsSystemReference) { // We do not allow transitive references to MVC via a framework reference to count. // e.g. depending on Microsoft.AspNetCore.SomeThingNewThatDependsOnMvc would not result in an assembly being treated as // referencing MVC. classifiedItem.DependencyClassification = _mvcAssemblies.Contains(classifiedItem.Name) ? DependencyClassification.MvcReference : DependencyClassification.DoesNotReferenceMvc; return(classifiedItem.DependencyClassification); } if (_mvcAssemblies.Contains(classifiedItem.Name)) { classifiedItem.DependencyClassification = DependencyClassification.MvcReference; return(classifiedItem.DependencyClassification); } var dependencyClassification = DependencyClassification.DoesNotReferenceMvc; foreach (var assemblyItem in GetReferences(classifiedItem.AssemblyItem.Path)) { var classification = Resolve(assemblyItem); if (classification == DependencyClassification.MvcReference || classification == DependencyClassification.ReferencesMvc) { dependencyClassification = DependencyClassification.ReferencesMvc; break; } } classifiedItem.DependencyClassification = dependencyClassification; return(dependencyClassification); }