/// <returns>True if there was a change.</returns> private static bool SyncFrameworks(XDocument doc, IVisualStudioProjectTemplate template) { var element = GetPropertyGroupElement(doc, "TargetFramework") ?? GetPropertyGroupElement(doc, "TargetFrameworks"); if (element == null) { throw new Exception("Could not determine framework element for project: " + template.FilePath); } var targetFrameworks = string.Join(";", template.GetTargetFrameworks().OrderBy(x => x)); if (element.Value == targetFrameworks) { return(false); } var elementName = template.GetTargetFrameworks().Count() == 1 ? "TargetFramework" : "TargetFrameworks"; element.ReplaceWith(XElement.Parse($"<{elementName}>{targetFrameworks}</{elementName}>")); return(true); }
public VisualStudioProjectCreatedEvent(string projectId, IVisualStudioProjectTemplate templateInstance) { ProjectId = projectId; TemplateInstance = templateInstance; }
internal static NuGetProject DetermineProjectNugetPackageInfo(IVisualStudioProjectTemplate project) { var projectContent = project.LoadContent(); var document = XDocument.Parse(projectContent); var projectType = document.ResolveProjectScheme(); if (!NuGetProjectSchemeProcessors.TryGetValue(projectType, out var processor)) { throw new ArgumentOutOfRangeException(nameof(projectType), $"No scheme registered for type {projectType}."); } //if (!_projectRegistry.ContainsKey(project.Model.Id)) //{ // Logging.Log.Warning($"Project file not found for project [{project}]"); // continue; //} var installedPackages = processor.GetInstalledPackages(project.FilePath, document); var highestVersionsInProject = new Dictionary <string, VersionRange>(); foreach (var installedPackage in installedPackages) { var packageId = installedPackage.Key; if (!highestVersionsInProject.TryGetValue(packageId, out var highestVersion) || highestVersion.MinVersion < installedPackage.Value.Version.MinVersion) { highestVersionsInProject[packageId] = installedPackage.Value.Version; } } //var consolidatedPackages = installedPackages.ToDictionary(x => x.Key, x => x.Value.Clone()); var requestedPackages = new Dictionary <string, NuGetPackage>(); foreach (var package in project.RequestedNugetPackages()) { if (!VersionRange.TryParse(package.Version, out var semanticVersion)) { throw new Exception( $"Could not parse '{package.Version}' from Intent metadata for package '{package.Name}' in project '{project.Name}' as a valid Semantic Version 2.0 'version' value."); } if (!highestVersionsInProject.TryGetValue(package.Name, out var highestVersion) || highestVersion.MinVersion < semanticVersion.MinVersion) { highestVersionsInProject[package.Name] = highestVersion = semanticVersion; } //if (consolidatedPackages.TryGetValue(package.Name, out var consolidatedPackage)) //{ // consolidatedPackage.Update(highestVersion, package); //} //else //{ // consolidatedPackages.Add(package.Name, NuGetPackage.Create(package, highestVersion)); //} if (requestedPackages.TryGetValue(package.Name, out var requestedPackage)) { requestedPackage.Update(highestVersion, package); } else { requestedPackages.Add(package.Name, NuGetPackage.Create(package, highestVersion)); } } return(new NuGetProject { Content = projectContent, RequestedPackages = requestedPackages, InstalledPackages = installedPackages, HighestVersions = highestVersionsInProject, Name = project.Name, FilePath = project.FilePath, Processor = processor }); }