Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        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);
        }