public static IEnumerable<string> GetAssembliesForFramework(FrameworkName framework, IPackage package, IEnumerable<string> packageAssemblies)
        {
            var patterns = PatternDefinitions.DotNetPatterns;

            if (packageAssemblies == null)
            {
                return null;
            }

            var files = packageAssemblies.Select(p => p.Replace(Path.DirectorySeparatorChar, '/')).ToList();
            var contentItems = new ContentItemCollection();
            contentItems.Load(files);

            var criteriaBuilderWithTfm = new SelectionCriteriaBuilder(patterns.Properties.Definitions);

            criteriaBuilderWithTfm = criteriaBuilderWithTfm
                 .Add["tfm", framework];

            var criteria = criteriaBuilderWithTfm.Criteria;

            var allReferencesGroup = contentItems.FindBestItemGroup(criteria, patterns.CompileTimeAssemblies, patterns.ManagedAssemblies);
            List<string> allReferencesGroupAssemblies = null;
            if (allReferencesGroup != null)
            {
                allReferencesGroupAssemblies = allReferencesGroup.Items.Select(t => t.Path).ToList();
            }

            if (allReferencesGroupAssemblies == null)
            {
                return null;
            }

            IEnumerable<string> oldLibGroupAssemblies = null;
            var oldLibGroup = contentItems.FindBestItemGroup(criteria, patterns.ManagedAssemblies);
            if (oldLibGroup != null)
            {
                oldLibGroupAssemblies = oldLibGroup.Items.Select(p => p.Path).ToList();
            }

            // COMPAT: Support lib/contract so older packages can be consumed
            string contractPath = "lib/contract/" + package.Id + ".dll";
            var hasContract = files.Any(path => contractPath.Equals(path, StringComparison.OrdinalIgnoreCase));
            var hasLib = oldLibGroupAssemblies != null && oldLibGroupAssemblies.Any();

            if (hasContract && hasLib && !DnxVersionUtility.IsDesktop(framework))
            {
                allReferencesGroupAssemblies.Clear();
                allReferencesGroupAssemblies.Add(contractPath);
            }

            // See if there's a list of specific references defined for this target framework
            IEnumerable<PackageReferenceSet> referenceSets;
            if (DnxVersionUtility.GetNearest(framework, package.PackageAssemblyReferences.ToList(), out referenceSets))
            {
                // Get the first compatible reference set
                var referenceSet = referenceSets.FirstOrDefault();

                if (referenceSet != null)
                {
                    // Remove all assemblies of which names do not appear in the References list
                    allReferencesGroupAssemblies.RemoveAll(path => path.StartsWith("lib/") 
                                                                   && !referenceSet.References.Contains(Path.GetFileName(path), StringComparer.OrdinalIgnoreCase));
                }
            }

            return allReferencesGroupAssemblies.Select(p => p.Replace('/', Path.DirectorySeparatorChar)).ToList();
        }
Exemple #2
0
        public static IEnumerable <string> GetAssembliesForFramework(FrameworkName framework, IPackage package, IEnumerable <string> packageAssemblies)
        {
            var patterns = PatternDefinitions.DotNetPatterns;

            if (packageAssemblies == null)
            {
                return(null);
            }

            var files        = packageAssemblies.Select(p => p.Replace(Path.DirectorySeparatorChar, '/')).ToList();
            var contentItems = new ContentItemCollection();

            contentItems.Load(files);

            var criteriaBuilderWithTfm = new SelectionCriteriaBuilder(patterns.Properties.Definitions);

            criteriaBuilderWithTfm = criteriaBuilderWithTfm
                                     .Add["tfm", framework];

            var criteria = criteriaBuilderWithTfm.Criteria;

            var           allReferencesGroup           = contentItems.FindBestItemGroup(criteria, patterns.CompileTimeAssemblies, patterns.ManagedAssemblies);
            List <string> allReferencesGroupAssemblies = null;

            if (allReferencesGroup != null)
            {
                allReferencesGroupAssemblies = allReferencesGroup.Items.Select(t => t.Path).ToList();
            }

            if (allReferencesGroupAssemblies == null)
            {
                return(null);
            }

            IEnumerable <string> oldLibGroupAssemblies = null;
            var oldLibGroup = contentItems.FindBestItemGroup(criteria, patterns.ManagedAssemblies);

            if (oldLibGroup != null)
            {
                oldLibGroupAssemblies = oldLibGroup.Items.Select(p => p.Path).ToList();
            }

            // COMPAT: Support lib/contract so older packages can be consumed
            string contractPath = "lib/contract/" + package.Id + ".dll";
            var    hasContract  = files.Any(path => contractPath.Equals(path, StringComparison.OrdinalIgnoreCase));
            var    hasLib       = oldLibGroupAssemblies != null && oldLibGroupAssemblies.Any();

            if (hasContract && hasLib && !DnxVersionUtility.IsDesktop(framework))
            {
                allReferencesGroupAssemblies.Clear();
                allReferencesGroupAssemblies.Add(contractPath);
            }

            // See if there's a list of specific references defined for this target framework
            IEnumerable <PackageReferenceSet> referenceSets;

            if (DnxVersionUtility.GetNearest(framework, package.PackageAssemblyReferences.ToList(), out referenceSets))
            {
                // Get the first compatible reference set
                var referenceSet = referenceSets.FirstOrDefault();

                if (referenceSet != null)
                {
                    // Remove all assemblies of which names do not appear in the References list
                    allReferencesGroupAssemblies.RemoveAll(path => path.StartsWith("lib/") &&
                                                           !referenceSet.References.Contains(Path.GetFileName(path), StringComparer.OrdinalIgnoreCase));
                }
            }

            return(allReferencesGroupAssemblies.Select(p => p.Replace('/', Path.DirectorySeparatorChar)).ToList());
        }
 public SelectionCriteriaEntryBuilder(SelectionCriteriaBuilder builder, SelectionCriteriaEntry entry) : base(builder.propertyDefinitions)
 {
     Builder = builder;
     Entry = entry;
 }
Exemple #4
0
 public SelectionCriteriaEntryBuilder(SelectionCriteriaBuilder builder, SelectionCriteriaEntry entry) : base(builder.propertyDefinitions)
 {
     Builder = builder;
     Entry   = entry;
 }