コード例 #1
0
        /// <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;
 }
コード例 #3
0
        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
            });
        }