示例#1
0
        private Package.DependencySet GetDependencySet()
        {
            var set     = new Package.DependencySet();
            var targets =
                dependencyGrid.Rows.Cast <DataGridViewRow>()
                .Select(r => r.Cells[2].Value?.ToString().Trim() ?? "").Distinct();

            if (targets.Any(t => !string.IsNullOrWhiteSpace(t)))
            {
                var groups = new List <Package.DependencyGroup>();
                foreach (var target in targets)
                {
                    var group = new Package.DependencyGroup
                    {
                        TargetFramework = string.IsNullOrWhiteSpace(target) ? null : target
                    };
                    Expression <Func <DataGridViewRow, bool> > exp = null;
                    if (string.IsNullOrWhiteSpace(target))
                    {
                        exp = (r => (r.Cells[0].Value != null && r.Cells[1].Value != null) && (r.Cells[2].Value == null || string.IsNullOrWhiteSpace(r.Cells[2].Value.ToString())));
                    }
                    else
                    {
                        exp = (r => (r.Cells[0].Value != null && r.Cells[1].Value != null) && r.Cells[2].Value != null && r.Cells[2].Value.ToString().Trim() == target);
                    }
                    group.Dependencies =
                        dependencyGrid.Rows.Cast <DataGridViewRow>()
                        .Where(exp.Compile())
                        .Select(r => new Package.Dependency
                    {
                        Id      = r.Cells[0].Value.ToString().Trim(),
                        Version = r.Cells[1].Value.ToString().Trim()
                    }).OrderBy(m => m.Id).ToList();
                    if (group.Dependencies.Count > 0)
                    {
                        groups.Add(group);
                    }
                }

                set.Groups = groups.OrderBy(m => m.TargetFramework).ToList();
            }
            else
            {
                set.Dependencies =
                    dependencyGrid.Rows.Cast <DataGridViewRow>().Where(r => (r.Cells[0].Value != null && r.Cells[1].Value != null))
                    .Select(r => new Package.Dependency
                {
                    Id      = r.Cells[0].Value.ToString().Trim(),
                    Version = r.Cells[1].Value.ToString().Trim()
                }).OrderBy(m => m.Id).ToList();
            }

            return(set);
        }
示例#2
0
        public Package.DependencySet GetDependencySet()
        {
            var dependencies = GetDependencies().ToList();
            var set          = new Package.DependencySet();
            var targets      = dependencies.Select(r => r.TargetFramework).Distinct().ToList();

            if (targets.Any(t => !string.IsNullOrWhiteSpace(t)))
            {
                var groups = new List <Package.DependencyGroup>();
                foreach (var target in targets)
                {
                    var group = new Package.DependencyGroup
                    {
                        TargetFramework = string.IsNullOrWhiteSpace(target) ? null : target
                    };
                    Expression <Func <DependencyViewModel, bool> > exp = null;
                    if (string.IsNullOrWhiteSpace(target))
                    {
                        exp = r => (string.IsNullOrWhiteSpace(r.TargetFramework));
                    }
                    else
                    {
                        exp = (r => r.TargetFramework == target);
                    }
                    group.Dependencies =
                        dependencies
                        .Where(exp.Compile())
                        .Select(r => new Package.Dependency
                    {
                        Id      = r.Id,
                        Version = r.Version
                    }).OrderBy(m => m.Id).ToList();
                    if (group.Dependencies.Count > 0)
                    {
                        groups.Add(group);
                    }
                }

                set.Groups = groups.OrderBy(m => m.TargetFramework).ToList();
            }
            else
            {
                set.Dependencies =
                    dependencies
                    .Select(r => new Package.Dependency
                {
                    Id      = r.Id,
                    Version = r.Version
                }).OrderBy(m => m.Id).ToList();
            }

            return(set);
        }
示例#3
0
        public static void MergeDependency(this Package.MetaData metadata,
                                           IEnumerable <DependencyViewModel> dependencyViewModels)
        {
            var dependencies = dependencyViewModels.ToList();

            if (!dependencies.Any())
            {
                return;
            }

            if (metadata.Dependencies == null)
            {
                metadata.Dependencies = new Package.DependencySet();
            }

            var dep = metadata.Dependencies;

            //remove exists
            dep?.Groups?.ForEach(g =>
            {
                g.Dependencies.RemoveAll(m => dependencies.Any(k => k.Id == m.Id));
            });

            dep?.Dependencies?.RemoveAll(m => dependencies.Any(k => k.Id == m.Id));


            //new target framework
            var frameworks = dependencies.Where(
                d =>
                (dep.Groups == null || dep.Groups.All(g => g.TargetFramework != d.TargetFramework)))
                             .Select(m => m.TargetFramework)
                             .Where(m => !string.IsNullOrWhiteSpace(m))
                             .Distinct().ToList();

            if (frameworks.Count > 0)
            {
                if (dep.Groups == null)
                {
                    dep.Groups = new List <Package.DependencyGroup>();
                }
                frameworks.ForEach(f => dep.Groups.Add(new Package.DependencyGroup
                {
                    TargetFramework = f
                }));
            }


            //append
            if (dep.Groups != null && dep.Groups.Count > 0)
            {
                //merge from packages.config
                dep.Groups.ForEach(g =>
                {
                    g.Dependencies.AddRange(
                        dependencies.Where(d => d.TargetFramework == g.TargetFramework && !d.DevelopmentDependency)
                        .Select(m => new Package.Dependency
                    {
                        Id      = m.Id,
                        Version = m.Version
                    }));
                });

                //merge my dependencies without group
                if (dep.Dependencies != null && dep.Dependencies.Count > 0)
                {
                    var g = dep.Groups.FirstOrDefault(m => m.TargetFramework == null);
                    if (g == null)
                    {
                        g = new Package.DependencyGroup();
                        dep.Groups.Add(g);
                    }
                    g.Dependencies = dep.Dependencies.ToList();
                    dep.Dependencies.Clear();
                }
            }
            else
            {
                if (dep.Dependencies == null)
                {
                    dep.Dependencies = new List <Package.Dependency>();
                }
                dep.Dependencies.AddRange(
                    dependencies.Where(p => string.IsNullOrWhiteSpace(p.TargetFramework) && !p.DevelopmentDependency)
                    .Select(m => new Package.Dependency
                {
                    Id      = m.Id,
                    Version = m.Version
                }));
            }
            //clear empty groups
            dep?.Groups?.RemoveAll(g => !g.Dependencies.Any());
        }