Exemplo n.º 1
0
        private HashSet <PackagesConfig> GetAllPackages()
        {
            HashSet <PackagesConfig> allPackages = new HashSet <PackagesConfig>();

            // Accumulate package dependencies for all projects.
            foreach (ITaskItem p in AllProjects)
            {
                string projPath = p.GetMetadata("FullPath");
                Log.LogMessage(MessageImportance.Low, $"Inspecting '{projPath}'.");
                if (string.IsNullOrWhiteSpace(projPath) || !File.Exists(projPath))
                {
                    Log.LogWarning($"FullPath not found for project {p.ItemSpec}");
                    continue;
                }

                // Project already handled?
                string projId = PackageIdPrefix + PackagesConfig.GetProjectId(p);
                if (allPackages.Any((i) => projId.Equals(i.Id)))
                {
                    continue;
                }

                // package.config file exists?
                PackagesConfig pc = PackagesConfig.Create(p, PackageIdPrefix);
                if (pc == null)
                {
                    Log.LogMessage(MessageImportance.Low, $"Can't find packages.config file for '{p.ItemSpec}'.");
                    continue;
                }

                Log.LogMessage(MessageImportance.Low, $"Parsing dependencies of '{p.ItemSpec}'.");
                allPackages.Add(pc);

                if (cancel_)
                {
                    Log.LogMessage(MessageImportance.Low, "Exit on cancel signal");
                    return(null);
                }
            }

            return(allPackages);
        }
        private void ConvertLibToPkg(string libName)
        {
            logger_.LogMessage(MessageImportance.Low, $"Inspecting '{libName}'");
            foreach (ITaskItem i in allProjects_)
            {
                string pp = i.GetMetadata("FullPath");
                if (string.IsNullOrEmpty(pp) || !File.Exists(pp))
                {
                    continue;
                }

                string alias = PackagesConfig.GetProjectId(i);
                if (!string.IsNullOrEmpty(alias) && alias.Equals(libName, StringComparison.OrdinalIgnoreCase))
                {
                    logger_.LogMessage($"Project {projectItem_.ItemSpec}- Converting library reference '{i.ItemSpec}' to Nuget package '{PackageIdPrefix + alias}' version {packageVersion_}");
                    packagesConfig_.Add(PackageIdPrefix + alias, packageVersion_);
                    break;
                }
            }
        }
        public void MigrateProjectReferences()
        {
            List <ProjectItem> allProjReferences = new List <ProjectItem>();

            foreach (ProjectItem i in project_.GetItemsIgnoringCondition("ProjectReference"))
            {
                allProjReferences.Add(i);
                string refProj = i.GetMetadataValue("FullPath");
                if (string.IsNullOrWhiteSpace(refProj) || !File.Exists(refProj))
                {
                    logger_.LogWarning($"File not found for project reference {i.UnevaluatedInclude}");
                    continue;
                }

                // Resolve project to package alias
                string    alias       = Path.GetFileNameWithoutExtension(refProj);
                ITaskItem refProjItem = allProjects_.FirstOrDefault((ii) => refProj.Equals(ii.GetMetadata("FullPath")));
                if (refProjItem != null)
                {
                    alias = PackagesConfig.GetProjectId(refProjItem);
                }

                logger_.LogMessage($"Project {projectItem_.ItemSpec}- Converting library reference '{refProj}' to Nuget package '{PackageIdPrefix + alias}' version {packageVersion_}");
                packagesConfig_.Add(PackageIdPrefix + alias, packageVersion_);
            }

            foreach (ProjectItem i in project_.GetItemsIgnoringCondition("Link"))
            {
                string   libDependencies = i.GetMetadataValue("AdditionalDependencies");
                string[] libs            = libDependencies.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string l in libs)
                {
                    string li = Path.GetFileNameWithoutExtension(l);
                    ConvertLibToPkg(li);
                }
            }

            foreach (ProjectMetadata i in project_.AllEvaluatedItemDefinitionMetadata)
            {
                if (i.ItemType.Equals("Link") && i.Name.Equals("AdditionalDependencies"))
                {
                    string   libDependencies = i.EvaluatedValue;
                    string[] libs            = libDependencies.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (string l in libs)
                    {
                        string li = Path.GetFileNameWithoutExtension(l);
                        ConvertLibToPkg(li);
                    }
                }
            }

            ProjectItemDefinition pid = project_.ItemDefinitions["Link"];

            if (pid != null)
            {
                string   libDependencies = pid.GetMetadataValue("AdditionalDependencies");
                string[] libs            = libDependencies.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string l in libs)
                {
                    string li = Path.GetFileNameWithoutExtension(l);
                    ConvertLibToPkg(li);
                }
            }

            project_.RemoveItems(allProjReferences);
            packagesConfig_.Save();
            project_.Save();
        }