public void AddProjects(IEnumerable <FolderProjectItem> projectItems, Guid?parentItemId) { SetSolutionData(SolutionData ?? System.IO.File.ReadAllText(_solutionPath).Replace("\r\n", "\n")); foreach (var projectItem in projectItems) { // TODO: Check the type in the actual project var relativePath = PathExtensions.MakeRelativePath(FolderPath, projectItem.Path); AddProject(ProjectTypeIdClassLibrary, projectItem.Name, relativePath, parentItemId); } }
public void TransmogrifyNugetPackagesToProjects(SolutionTool solutionTool, FolderTool folderTool) { UpdateSolutionWithFolderTargets(solutionTool, folderTool); var projects = solutionTool.GetProjectsWithParents().ToArray(); var projectsLookup = projects.Where(p => solutionTool.CompilableProjects.Contains(p.Type)).ToDictionary(p => p.Name, p => p); foreach (var project in projects) { if (solutionTool.CompilableProjects.Contains(project.Type)) { var projectPath = PathExtensions.GetAbsolutePath(solutionTool.FolderPath, project.Path); var projectTool = new ProjectTool(projectPath, _logger); if (projectTool.IsCpsDocument) { foreach (var packageReference in projectTool.GetPackageReferences().ToArray()) { if (projectsLookup.ContainsKey(packageReference.Name)) { var matchingProject = projectsLookup[packageReference.Name]; projectTool.RemovePackageReference(packageReference.Name); _logger.LogInformation($"Removed NuGet {packageReference.Name} from {project.Name}"); var absolutePath = PathExtensions.GetAbsolutePath(solutionTool.FolderPath, matchingProject.Path); var relativePath = PathExtensions.MakeRelativePath(projectTool.FolderPath, absolutePath); projectTool.AddProjectReference(matchingProject.Name, relativePath, matchingProject.Id); _logger.LogInformation($"Added ProjectReference {matchingProject.Name} from {relativePath}"); var nugetPackageTool = new NugetPackageTool(solutionTool.FolderPath, packageReference.Name, packageReference.Version, packageReference.TargetFramework); var nuspec = nugetPackageTool.GetNuspec(); foreach (var dependency in nuspec.Dependencies) { if (projectsLookup.ContainsKey(dependency.Name)) { matchingProject = projectsLookup[dependency.Name]; absolutePath = PathExtensions.GetAbsolutePath(solutionTool.FolderPath, matchingProject.Path); relativePath = PathExtensions.MakeRelativePath(projectTool.FolderPath, absolutePath); projectTool.AddProjectReference(matchingProject.Name, relativePath, matchingProject.Id); _logger.LogInformation($"Added ProjectReference {matchingProject.Name} from {relativePath} for dependency from nuspec"); } else { projectTool.AddNugetReference(dependency.Name, dependency.Version, null); } _logger.LogProgress(); } } _logger.LogProgress(); } } else { foreach (var reference in projectTool.GetReferences().ToArray()) { if (projectsLookup.ContainsKey(reference.Name)) { var matchingProject = projectsLookup[reference.Name]; var packages = projectTool.GetPackageReferences().ToArray(); var referencePackage = packages.FirstOrDefault(pkg => pkg.Name == reference.Name); if (referencePackage != null) { projectTool.RemovePackageReference(referencePackage.Name); _logger.LogInformation($"Removed NuGet {referencePackage.Name} from packages.config"); projectTool.RemoveReference(reference.Name); _logger.LogInformation($"Removed Reference {reference.Name} from {projectTool.FilePath}"); var absolutePath = PathExtensions.GetAbsolutePath(solutionTool.FolderPath, matchingProject.Path); var relativePath = PathExtensions.MakeRelativePath(projectTool.FolderPath, absolutePath); projectTool.AddProjectReference(matchingProject.Name, relativePath, matchingProject.Id); _logger.LogInformation($"Added ProjectReference {matchingProject.Name} from {relativePath}"); var nugetPackageTool = new NugetPackageTool(solutionTool.FolderPath, referencePackage.Name, referencePackage.Version, referencePackage.TargetFramework); var nuspec = nugetPackageTool.GetNuspec(); foreach (var dependency in nuspec.Dependencies) { if (projectsLookup.ContainsKey(dependency.Name)) { matchingProject = projectsLookup[dependency.Name]; absolutePath = PathExtensions.GetAbsolutePath(solutionTool.FolderPath, matchingProject.Path); relativePath = PathExtensions.MakeRelativePath(projectTool.FolderPath, absolutePath); projectTool.AddProjectReference(matchingProject.Name, relativePath, matchingProject.Id); _logger.LogInformation($"Added ProjectReference {matchingProject.Name} from {relativePath} for dependency from nuspec"); } else { var existingReference = packages.FirstOrDefault(pkg => pkg.Name == dependency.Name); if (existingReference == null) { projectTool.AddNugetReference(dependency.Name, dependency.Version, projectTool.GetTargetFramework()); } } _logger.LogProgress(); } } } _logger.LogProgress(); } } projectTool.Save(); } _logger.LogProgress(); } }