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(); }