/// Note: currently no need for this capability.
        public static PackageSpecification[] GetPackageReferences(ProjectFilePath projectFilePath)
        {
            var packageSpecifications = new List <PackageSpecification>();

            // dotnet list package output is too complicated to parse, so just go direct to XML.
            var doc = new XmlDocument();

            doc.Load(projectFilePath.Value);

            var nodes = doc.SelectNodes("//Project/ItemGroup/PackageReference");

            for (int iNode = 0; iNode < nodes.Count; iNode++)
            {
                var node = nodes.Item(iNode);

                var includeAttribute = node.Attributes["Include"];
                var versionAttribute = node.Attributes["Version"];

                var packageID      = includeAttribute.Value.AsPackageID();
                var packageVersion = Version.Parse(versionAttribute.Value);

                var packageSpecification = new PackageSpecification(packageID, packageVersion);
                packageSpecifications.Add(packageSpecification);
            }

            var output = packageSpecifications.ToArray();

            return(output);
        }
Example #2
0
        public static PackageSpecification GetPackageSpecification(NuspecFilePath nuspecFilePath)
        {
            var xmlDoc = new XmlDocument();

            xmlDoc.Load(nuspecFilePath.Value);

            var packageElement        = xmlDoc.SelectSingleNode("//*[local-name()='package']");
            var namespaceAttribute    = packageElement.Attributes["xmlns"];
            var defaultNamespaceValue = namespaceAttribute.Value; // Example: "http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd", but annoyingly can be different between Visual Studio's NuGet and the latest NuGet executable.

            // Create a namespace manager.
            var xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);

            xmlnsManager.AddNamespace("default", defaultNamespaceValue);

            var metadataElement = xmlDoc.SelectSingleNode("//default:package/default:metadata", xmlnsManager);

            var IDElementXPath = "//default:package/default:metadata/default:id";
            var IDElement      = xmlDoc.SelectSingleNode(IDElementXPath, xmlnsManager);
            var ID             = IDElement.InnerText;

            var versionElementXPath = "//default:package/default:metadata/default:version";
            var versionElement      = xmlDoc.SelectSingleNode(versionElementXPath, xmlnsManager);
            var versionString       = versionElement.InnerText;
            var version             = Version.Parse(versionString);

            var specification = new PackageSpecification
            {
                ID      = ID.AsPackageID(),
                Version = version,
            };

            return(specification);
        }
        public static void AddPackageToProject(ProjectFilePath projectFilePath, PackageSpecification packageSpecification, ILogger logger)
        {
            logger.LogDebug($"{projectFilePath} - Adding package to project file:\n{packageSpecification}");

            var packageArgument = " " + $"package {packageSpecification.ID}";
            var versionArgument = packageSpecification.HasVersion() ? " " + $"--version {packageSpecification.Version}" : String.Empty;
            var arguments       = $@"add ""{projectFilePath}""{packageArgument}{versionArgument}";

            ProcessRunner.Run(DotnetCommand.Value, arguments);

            logger.LogInformation($"{projectFilePath} - Added package to project file:\n{packageSpecification}");
        }
Example #4
0
 public void SetUp()
 {
     _sut = new PackageSpecification();
 }
Example #5
0
 public void AddPackageReference(ProjectFilePath projectFilePath, PackageSpecification package)
 {
     DotnetCommandServicesProvider.AddPackageToProject(projectFilePath, package, this.Logger);
 }