示例#1
0
        private IEnumerable <string> GetPackageAssemblyNames(string path)
        {
            var compatibilityProvider = new DefaultCompatibilityProvider();
            var folderReader          = new PackageFolderReader(Path.Combine(path, _fileSystem.PackagesFolder));
            var nupkgFiles            = folderReader.GetFiles().Where(x => Path.GetExtension(x).ToLowerInvariant() == ".nupkg");

            var packagesConfig = XDocument.Parse(File.ReadAllText(Path.Combine(path, _fileSystem.PackagesFile)));

            var reader   = new PackagesConfigReader(packagesConfig);
            var contents = reader.GetPackages();

            var result = new List <string>();

            foreach (var nupkg in nupkgFiles)
            {
                var stream        = folderReader.GetStream(nupkg);
                var packageReader = new PackageReader(stream);

                var identity = packageReader.GetIdentity();
                var packagesConfigReference = contents.FirstOrDefault(x => x.PackageIdentity.Id == identity.Id && x.PackageIdentity.Version == identity.Version);

                if (packagesConfigReference == null)
                {
                    break;
                }

                var packageContents = packageReader.GetLibItems().Where(x => compatibilityProvider.IsCompatible(x.TargetFramework, packagesConfigReference.TargetFramework)).
                                      SelectMany(x => x.Items.Where(i => Path.GetExtension(i).ToLowerInvariant() == ".dll"));

                result.AddRange(packageContents);
            }

            return(result);
        }
示例#2
0
        private void LoadFromPackagesConfig()
        {
            IEnumerable <PackageReference> packageReferences = new List <PackageReference>();

            string packageConfig = Path.Combine(_projectDir, Constants.PackagesConfig);

            if (File.Exists(packageConfig))
            {
                try
                {
                    using var fileStream = new FileStream(packageConfig, FileMode.Open);
                    var configReader = new PackagesConfigReader(fileStream);
                    var packages     = configReader.GetPackages(true);

                    packages?.ToList().ForEach(package => {
                        var reference = new ExternalReference()
                        {
                            Identity = package.PackageIdentity.Id, Version = package.PackageIdentity.Version.OriginalVersion
                        };
                        if (!_externalReferences.NugetReferences.Contains(reference))
                        {
                            _externalReferences.NugetReferences.Add(reference);
                        }
                    });
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex, "Error while parsing file {0}", packageConfig);
                }
            }
        }
示例#3
0
        private IEnumerable <PackageReference> LoadPackages(string projectDir)
        {
            IEnumerable <PackageReference> packageReferences = new List <PackageReference>();

            string packagesFile = Path.Combine(projectDir, "packages.config");

            if (File.Exists(packagesFile))
            {
                try
                {
                    XDocument xDocument = NuGet.Common.XmlUtility.Load(packagesFile);
                    var       reader    = new PackagesConfigReader(xDocument);
                    packageReferences = reader.GetPackages();
                }
                catch (XmlException ex)
                {
                    Logger.LogError(ex, "Error while parsing xml for file {0}", packagesFile);
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex, "Error while parsing file {0}", packagesFile);
                }
            }
            return(packageReferences);
        }
        protected override void Execute(byte[] encodedFile)
        {
            var result = new PackagesConfigReader().ReadDependencies(encodedFile);

            result.Count.Should().Be(2);
            result.Should().BeEquivalentTo("Antlr", "bootstrap");
        }
        public void PackagesConfigWriter_Basic()
        {
            var stream = new MemoryStream();

            using (PackagesConfigWriter writer = new PackagesConfigWriter(stream))
            {
                writer.WriteMinClientVersion(NuGetVersion.Parse("3.0.1"));

                writer.WritePackageEntry("packageB", NuGetVersion.Parse("2.0.0"), NuGetFramework.Parse("portable-net45+win8"));

                writer.WritePackageEntry("packageA", NuGetVersion.Parse("1.0.1"), NuGetFramework.Parse("net45"));
            }

            stream.Seek(0, SeekOrigin.Begin);

            var xml = XDocument.Load(stream);

            Assert.Equal("utf-8", xml.Declaration.Encoding);

            PackagesConfigReader reader = new PackagesConfigReader(xml);

            Assert.Equal("3.0.1", reader.GetMinClientVersion().ToNormalizedString());

            var packages = reader.GetPackages().ToArray();
            Assert.Equal("packageA", packages[0].PackageIdentity.Id);
            Assert.Equal("packageB", packages[1].PackageIdentity.Id);

            Assert.Equal("1.0.1", packages[0].PackageIdentity.Version.ToNormalizedString());
            Assert.Equal("2.0.0", packages[1].PackageIdentity.Version.ToNormalizedString());

            Assert.Equal("net45", packages[0].TargetFramework.GetShortFolderName());
            Assert.Equal("portable-net45+win8", packages[1].TargetFramework.GetShortFolderName());
        }
        public void PackagesConfigWriter_Basic()
        {
            MemoryStream stream = new MemoryStream();

            using (PackagesConfigWriter writer = new PackagesConfigWriter(stream))
            {
                writer.WriteMinClientVersion(NuGetVersion.Parse("3.0.1"));

                writer.WritePackageEntry("packageB", NuGetVersion.Parse("2.0.0"), NuGetFramework.Parse("portable-net45+win8"));

                writer.WritePackageEntry("packageA", NuGetVersion.Parse("1.0.1"), NuGetFramework.Parse("net45"));
            }

            stream.Seek(0, SeekOrigin.Begin);

            var xml = XDocument.Load(stream);

            Assert.Equal("utf-8", xml.Declaration.Encoding);

            PackagesConfigReader reader = new PackagesConfigReader(xml);

            Assert.Equal("3.0.1", reader.GetMinClientVersion().ToNormalizedString());

            var packages = reader.GetPackages().ToArray();

            Assert.Equal("packageA", packages[0].PackageIdentity.Id);
            Assert.Equal("packageB", packages[1].PackageIdentity.Id);

            Assert.Equal("1.0.1", packages[0].PackageIdentity.Version.ToNormalizedString());
            Assert.Equal("2.0.0", packages[1].PackageIdentity.Version.ToNormalizedString());

            Assert.Equal("net45", packages[0].TargetFramework.GetShortFolderName());
            Assert.Equal("portable-net45+win8", packages[1].TargetFramework.GetShortFolderName());
        }
示例#7
0
        protected IEnumerable <Packaging.PackageReference> GetInstalledPackageReferences(
            string projectConfigFilePath,
            bool allowDuplicatePackageIds)
        {
            if (File.Exists(projectConfigFilePath))
            {
                try
                {
                    var xDocument = XDocument.Load(projectConfigFilePath);
                    var reader    = new PackagesConfigReader(XDocument.Load(projectConfigFilePath));
                    return(reader.GetPackages(allowDuplicatePackageIds));
                }
                catch (XmlException ex)
                {
                    var message = string.Format(
                        CultureInfo.CurrentCulture,
                        LocalizedResourceManager.GetString("Error_PackagesConfigParseError"),
                        projectConfigFilePath,
                        ex.Message);

                    throw new CommandLineException(message);
                }
            }

            return(Enumerable.Empty <Packaging.PackageReference>());
        }
        private List <PackageReference> GetInstalledPackagesList()
        {
            try
            {
                var xml = GetPackagesConfig();

                if (xml != null)
                {
                    var reader = new PackagesConfigReader(xml);
                    return(reader.GetPackages().ToList());
                }
            }
            catch (Exception ex)
                when(ex is XmlException ||
                     ex is PackagesConfigReaderException)
                {
                    throw new InvalidOperationException(string.Format(
                                                            CultureInfo.CurrentCulture,
                                                            Strings.ErrorLoadingPackagesConfig,
                                                            FullPath,
                                                            ex.Message));
                }

            return(new List <PackageReference>());
        }
        public void PackagesConfigWriter_Remove()
        {
            // Arrange
            using (var stream = new MemoryStream())
            {
                // Act
                using (var writer = new PackagesConfigWriter(stream, true))
                {
                    writer.AddPackageEntry("packageB", NuGetVersion.Parse("2.0.0"), NuGetFramework.Parse("portable-net45+win8"));

                    writer.AddPackageEntry("packageA", NuGetVersion.Parse("1.0.1"), NuGetFramework.Parse("net45"));

                    writer.RemovePackageEntry("packageB", NuGetVersion.Parse("2.0.0"), NuGetFramework.Parse("portable-net45+win8"));
                }

                stream.Seek(0, SeekOrigin.Begin);

                var xml = XDocument.Load(stream);

                // Assert
                Assert.Equal("utf-8", xml.Declaration.Encoding);

                var reader = new PackagesConfigReader(xml);

                var packages = reader.GetPackages().ToArray();
                Assert.Equal("1", packages.Count().ToString());
                Assert.Equal("packageA", packages[0].PackageIdentity.Id);
                Assert.Equal("1.0.1", packages[0].PackageIdentity.Version.ToNormalizedString());
                Assert.Equal("net45", packages[0].TargetFramework.GetShortFolderName());
            }
        }
示例#10
0
 private void Reader(Action <PackagesConfigReader> handler)
 {
     using (Stream fileContent = new FileStream(ExtractFilePath, FileMode.Open))
     {
         PackagesConfigReader reader = new PackagesConfigReader(fileContent);
         handler(reader);
     }
 }
        private HashSet <PackageReference> GetInstalledPackageReferences(string projectConfigFilePath)
        {
            if (File.Exists(projectConfigFilePath))
            {
                var reader = new PackagesConfigReader(XDocument.Load(projectConfigFilePath));
                return(new HashSet <PackageReference>(reader.GetPackages(), new PackageReferenceComparer()));
            }

            return(new HashSet <PackageReference>(new PackageReferenceComparer()));
        }
        private List <PackageReference> GetInstalledPackagesList()
        {
            if (File.Exists(FullPath))
            {
                var reader = new PackagesConfigReader(XDocument.Load(FullPath));
                return(reader.GetPackages().ToList());
            }

            return(new List <PackageReference>());
        }
示例#13
0
 private static IEnumerable <PackageReference> GetInstalledPackageReferencesFromConfigFile(
     string projectConfigFilePath,
     bool allowDuplicatePackageIds)
 {
     using (var file = File.Open(projectConfigFilePath, FileMode.Open, FileAccess.Read))
     {
         var reader = new PackagesConfigReader(file);
         return(reader.GetPackages(allowDuplicatePackageIds));
     }
 }
        public static PackagesLockFile FromPackagesConfigFile(
            string pcFile,
            NuGetFramework projectTfm,
            string packagesFolderPath,
            CancellationToken token)
        {
            if (pcFile == null)
            {
                throw new ArgumentNullException(nameof(pcFile));
            }
            if (!File.Exists(pcFile))
            {
                throw new FileNotFoundException(string.Format(Strings.Error_FileDoesNotExist, pcFile), pcFile);
            }
            if (projectTfm == null)
            {
                throw new ArgumentNullException(nameof(projectTfm));
            }
            if (packagesFolderPath == null)
            {
                throw new ArgumentNullException(nameof(packagesFolderPath));
            }
            if (!Directory.Exists(packagesFolderPath))
            {
                throw new DirectoryNotFoundException(string.Format(Strings.Error_DirectoryDoesNotExist, packagesFolderPath));
            }

            var lockFile = new PackagesLockFile();
            var target   = new PackagesLockFileTarget();

            lockFile.Targets.Add(target);
            target.TargetFramework = projectTfm;

            using (var stream = File.OpenRead(pcFile))
            {
                var contentHashUtil = new PackagesConfigContentHashProvider(new FolderNuGetProject(packagesFolderPath));

                var reader = new PackagesConfigReader(stream);
                foreach (var package in reader.GetPackages(allowDuplicatePackageIds: true))
                {
                    var dependency = new LockFileDependency
                    {
                        Id               = package.PackageIdentity.Id,
                        ContentHash      = contentHashUtil.GetContentHash(package.PackageIdentity, token),
                        RequestedVersion = new VersionRange(package.PackageIdentity.Version, includeMinVersion: true, package.PackageIdentity.Version, includeMaxVersion: true),
                        ResolvedVersion  = package.PackageIdentity.Version,
                        Type             = PackageDependencyType.Direct
                    };

                    target.Dependencies.Add(dependency);
                }
            }

            return(lockFile);
        }
        public void PackagesConfigWriter_BasicWithDifferentCulture()
        {
            var currentCulture   = CultureInfo.CurrentCulture;
            var currentUICulture = CultureInfo.CurrentUICulture;

            try
            {
                var calendar = new CultureInfo("he-IL");
                calendar.DateTimeFormat.Calendar = new HebrewCalendar();

                CultureInfo.CurrentCulture   = calendar;
                CultureInfo.CurrentUICulture = calendar;

                // Arrange
                using (var testFolder = TestDirectory.Create())
                {
                    var path = Path.Combine(testFolder + "packages.config");

                    // Act
                    using (var writer = new PackagesConfigWriter(path, true))
                    {
                        writer.WriteMinClientVersion(NuGetVersion.Parse("3.0.1"));

                        writer.AddPackageEntry("packageB", NuGetVersion.Parse("2.0.0"), NuGetFramework.Parse("portable-net45+win8"));

                        writer.AddPackageEntry("packageA", NuGetVersion.Parse("1.0.1"), NuGetFramework.Parse("net45"));
                    }

                    // Assert
                    var xml = XDocument.Load(path);

                    // Assert
                    Assert.Equal("utf-8", xml.Declaration.Encoding);

                    var reader = new PackagesConfigReader(xml);

                    Assert.Equal("3.0.1", reader.GetMinClientVersion().ToNormalizedString());

                    var packages = reader.GetPackages().ToArray();
                    Assert.Equal("packageA", packages[0].PackageIdentity.Id);
                    Assert.Equal("packageB", packages[1].PackageIdentity.Id);

                    Assert.Equal("1.0.1", packages[0].PackageIdentity.Version.ToNormalizedString());
                    Assert.Equal("2.0.0", packages[1].PackageIdentity.Version.ToNormalizedString());

                    Assert.Equal("net45", packages[0].TargetFramework.GetShortFolderName());
                    Assert.Equal("portable-net45+win8", packages[1].TargetFramework.GetShortFolderName());
                }
            }
            finally
            {
                CultureInfo.CurrentCulture   = currentCulture;
                CultureInfo.CurrentUICulture = currentUICulture;
            }
        }
示例#16
0
        public IEnumerable <IPackageReference> FindReferences(string path)
        {
            if (!File.Exists(path))
            {
                yield break;
            }

            var packagesConfig = XDocument.Parse(File.ReadAllText(path));
            var reader         = new PackagesConfigReader(packagesConfig);

            var references = reader.GetPackages().ToList();

            if (references.Any())
            {
                foreach (var packageReference in references)
                {
                    yield return(new ScriptCs.Dnx.Core.PackageReference(
                                     packageReference.PackageIdentity.Id,
                                     new FrameworkName(packageReference.TargetFramework.DotNetFrameworkName),
                                     packageReference.PackageIdentity.Version.ToString()));
                }

                yield break;
            }

            //todo:
            // No packages.config, check packages folder
            //var packagesFolder = Path.Combine(_fileSystem.GetWorkingDirectory(path), _fileSystem.PackagesFolder);
            //if (!_fileSystem.DirectoryExists(packagesFolder))
            //{
            //    yield break;
            //}

            //var repository = new LocalPackageRepository(packagesFolder);

            //var arbitraryPackages = repository.GetPackages();
            //if (!arbitraryPackages.Any())
            //{
            //    yield break;
            //}

            //foreach (var arbitraryPackage in arbitraryPackages)
            //{
            //    var newestFramework = GetNewestSupportedFramework(arbitraryPackage)
            //                          ?? VersionUtility.EmptyFramework;

            //    yield return new PackageReference(
            //        arbitraryPackage.Id,
            //        newestFramework,
            //        arbitraryPackage.Version.Version,
            //        arbitraryPackage.Version.SpecialVersion);
            //}
        }
示例#17
0
        private void MergePackagesConfig()
        {
            var file = Path.Combine(Path.GetDirectoryName(_project.FileName), "packages.config");

            if (!File.Exists(file))
            {
                return;
            }
            var reader   = new PackagesConfigReader(file);
            var packages = reader.GetDependencies().ToList();

            _nupack.Metadata.MergeDependency(packages);
        }
示例#18
0
        public void PackagesConfigReader_BadMinClientVersion()
        {
            var doc = XDocument.Parse(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<packages minClientVersion=""abc"">
  <package id=""test"" version=""1.0"" />
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws <PackagesConfigReaderException>(() => reader.GetMinClientVersion());

            Assert.Equal(ex.Message, "Invalid minClientVersion: 'abc'");
        }
示例#19
0
        public void PackagesConfigReader_BadId()
        {
            var doc = XDocument.Parse(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id="""" />
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws <PackagesConfigReaderException>(() => reader.GetPackages());

            Assert.Equal(ex.Message, "Null or empty package id");
        }
示例#20
0
        public void PackagesConfigReader_InvalidAllowedVersions()
        {
            var doc = XDocument.Parse(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id=""test"" version=""1.0"" allowedVersions=""xyz""/>
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws <PackagesConfigReaderException>(() => reader.GetPackages());

            Assert.Equal(ex.Message, "Invalid allowedVersions for package id 'test': 'xyz'");
        }
 private List <PackageReference> GetPackageReferencesFromConfigFile()
 {
     try
     {
         XDocument xDocument = XmlUtility.Load(_packageConfigFile);
         var       reader    = new PackagesConfigReader(xDocument);
         return(reader.GetPackages(true).ToList());
     }
     catch (XmlException ex)
     {
         throw new PortingAssistantClientException("Unable to parse packages.config file", ex);
     }
 }
        public void PackagesConfigReader_Basic3()
        {
            var reader = new PackagesConfigReader(PackagesConf3);

            var version = reader.GetMinClientVersion();

            Assert.Equal("3.0.0", version.ToNormalizedString());

            var packageEntries = reader.GetPackages().ToArray();

            Assert.Equal(2, packageEntries.Length);
            Assert.Equal("Newtonsoft.Json", packageEntries[0].PackageIdentity.Id);
            Assert.Equal("TestPackage", packageEntries[1].PackageIdentity.Id);
        }
示例#23
0
        public void PackagesConfigReader_Basic3()
        {
            var reader = new PackagesConfigReader(PackagesConf3);

            var version = reader.GetMinClientVersion();

            Assert.Equal("3.0.0", version.ToNormalizedString());

            var packageEntries = reader.GetPackages().ToArray();

            Assert.Equal(2, packageEntries.Length);
            Assert.Equal("Newtonsoft.Json", packageEntries[0].PackageIdentity.Id);
            Assert.Equal("TestPackage", packageEntries[1].PackageIdentity.Id);
        }
示例#24
0
        private IEnumerable <PackageIdentity> CreatePackageIdentitiesFromPackagesConfig()
        {
            var identities = Enumerable.Empty <PackageIdentity>();

            try
            {
                // Example: install-package https://raw.githubusercontent.com/NuGet/json-ld.net/master/src/JsonLD/packages.config
                if (UriHelper.IsHttpSource(Id))
                {
                    var request  = (HttpWebRequest)WebRequest.Create(Id);
                    var response = (HttpWebResponse)request.GetResponse();
                    // Read data via the response stream
                    var resStream = response.GetResponseStream();

                    var reader      = new PackagesConfigReader(resStream);
                    var packageRefs = reader.GetPackages();
                    identities = packageRefs.Select(v => v.PackageIdentity);
                }
                else
                {
                    // Example: install-package c:\temp\packages.config
                    using (var stream = new FileStream(Id, FileMode.Open))
                    {
                        var reader      = new PackagesConfigReader(stream);
                        var packageRefs = reader.GetPackages();
                        identities = packageRefs.Select(v => v.PackageIdentity);
                    }
                }

                // Set _allowPrerelease to true if any of the identities is prerelease version.
                if (identities != null &&
                    identities.Any())
                {
                    foreach (var identity in identities)
                    {
                        if (identity.Version.IsPrerelease)
                        {
                            _allowPrerelease = true;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogCore(MessageLevel.Error, string.Format(CultureInfo.CurrentCulture, Resources.Cmdlet_FailToParsePackages, Id, ex.Message));
            }

            return(identities);
        }
示例#25
0
        public bool IsInstalled(IPackageIdentity package)
        {
            Ensure.NotNull(package, "package");

            if (!File.Exists(ConfigFilePath))
            {
                return(false);
            }

            using (Stream fileContent = new FileStream(ConfigFilePath, FileMode.Open))
            {
                PackagesConfigReader reader = new PackagesConfigReader(fileContent);
                return(reader.GetPackages().Any(p => p.PackageIdentity.Id == package.Id && p.PackageIdentity.Version.ToFullString() == package.Version));
            }
        }
示例#26
0
        public bool IsInstalled(IPackageIdentity package)
        {
            Ensure.NotNull(package, "package");

            if (!File.Exists(ConfigFilePath))
            {
                return(false);
            }

            using (Stream fileContent = new FileStream(ConfigFilePath, FileMode.Open))
            {
                PackagesConfigReader reader = new PackagesConfigReader(fileContent);
                return(reader.GetPackages().Any(p => string.Equals(p.PackageIdentity.Id, package.Id, StringComparison.CurrentCultureIgnoreCase) && string.Equals(p.PackageIdentity.Version.ToFullString(), package.Version, StringComparison.CurrentCultureIgnoreCase)));
            }
        }
        public void PackagesConfigWriter_UpdateAttributesFromOriginalConfig()
        {
            // Arrange
            using (var stream = new MemoryStream())
                using (var stream2 = new MemoryStream())
                {
                    // Act
                    using (var writer = new PackagesConfigWriter(stream, true))
                    {
                        var vensionRange      = new VersionRange(NuGetVersion.Parse("0.5.0"));
                        var packageIdentityA  = new PackageIdentity("packageA", NuGetVersion.Parse("1.0.1"));
                        var packageReferenceA = new PackageReference(packageIdentityA, NuGetFramework.Parse("net45"),
                                                                     userInstalled: false, developmentDependency: false, requireReinstallation: true, allowedVersions: vensionRange);

                        writer.AddPackageEntry(packageReferenceA);
                    }

                    stream.Seek(0, SeekOrigin.Begin);
                    var xml = XDocument.Load(stream);

                    var packageIdentityB  = new PackageIdentity("packageA", NuGetVersion.Parse("3.0.1"));
                    var packageReferenceB = new PackageReference(packageIdentityB, NuGetFramework.Parse("dnxcore50"),
                                                                 userInstalled: false, developmentDependency: false, requireReinstallation: false);

                    using (var writer = new PackagesConfigWriter(stream2, true))
                    {
                        writer.UpdateOrAddPackageEntry(xml, packageReferenceB);
                    }

                    stream2.Seek(0, SeekOrigin.Begin);
                    var xml2   = XDocument.Load(stream2);
                    var reader = new PackagesConfigReader(xml2);

                    // Assert

                    var packages = reader.GetPackages().ToArray();
                    Assert.Equal("1", packages.Count().ToString());
                    Assert.Equal("packageA", packages[0].PackageIdentity.Id);
                    Assert.Equal("3.0.1", packages[0].PackageIdentity.Version.ToNormalizedString());
                    Assert.Equal("dnxcore50", packages[0].TargetFramework.GetShortFolderName());

                    // Verify allowedVersions attribute is kept after package update.
                    Assert.Equal("[0.5.0, )", packages[0].AllowedVersions.ToNormalizedString());

                    // Verify that RequireReinstallation attribute is removed after package upate.
                    Assert.Equal("False", packages[0].RequireReinstallation.ToString());
                }
        }
示例#28
0
        public void Execute(object arg = null)
        {
            var dte     = Host.Instance.Dte2;
            var project = dte.GetActiveProejct();

            Common.CheckTfs(project);
            var file = Path.Combine(project.GetDirectory(), NuGet.NuGetDomain.NuSpecFileName);

            if (File.Exists(file))
            {
                return;
            }

            using (var sw = new StreamWriter(file, false, Encoding.UTF8))
            {
                var temp       = Resource.NuSpecTemplate;
                var configFile = Path.Combine(Path.GetDirectoryName(project.FileName), "packages.config");
                if (File.Exists(configFile))
                {
                    try
                    {
                        var reader = new PackagesConfigReader(configFile);
                        var ds     = reader.GetDependencySet();
                        if (ds.Any())
                        {
                            var package = new NuGet.Package();
                            package.Metadata.Dependencies = ds;
                            var packageXml = XmlSerializerHelper.GetXmlStringFromObject(package);
                            var start      = packageXml.IndexOf("<dependencies>");
                            var end        = packageXml.IndexOf("</dependencies>") + "</dependencies>".Length;
                            packageXml = packageXml.Substring(start, end - start);
                            temp       = Regex.Replace(temp, "<dependencies>.*?</dependencies>",
                                                       $"{packageXml}", RegexOptions.Singleline | RegexOptions.Compiled);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
                sw.Write(temp);
                sw.Flush();
                sw.Close();
            }

            project.ProjectItems.AddFromFile(file);
            dte.ItemOperations.OpenFile(file);
        }
示例#29
0
        /// <summary>
        /// Return list of package identities parsed from packages.config
        /// </summary>
        IEnumerable <PackageIdentity> CreatePackageIdentitiesFromPackagesConfig()
        {
            IEnumerable <PackageIdentity> identities = Enumerable.Empty <PackageIdentity> ();

            try {
                // Example: install-package https://raw.githubusercontent.com/NuGet/json-ld.net/master/src/JsonLD/packages.config
                if (UriHelper.IsHttpSource(Id))
                {
                    HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(Id);
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    // Read data via the response stream
                    Stream resStream = response.GetResponseStream();

                    var reader      = new PackagesConfigReader(resStream);
                    var packageRefs = reader.GetPackages();
                    identities = packageRefs.Select(v => v.PackageIdentity);
                }
                else
                {
                    // Example: install-package c:\temp\packages.config
                    using (FileStream stream = new FileStream(Id, FileMode.Open)) {
                        var reader      = new PackagesConfigReader(stream);
                        var packageRefs = reader.GetPackages();
                        identities = packageRefs.Select(v => v.PackageIdentity);
                    }
                }

                // Set _allowPrerelease to true if any of the identities is prerelease version.
                if (identities != null &&
                    identities.Any())
                {
                    foreach (PackageIdentity identity in identities)
                    {
                        if (identity.Version.IsPrerelease)
                        {
                            allowPrerelease = true;
                            break;
                        }
                    }
                }
            } catch (Exception ex) {
                Log(MessageLevel.Error, GettextCatalog.GetString("Failed to parse package identities from file {0} with exception: {1}", Id, ex.Message));
            }

            return(identities);
        }
示例#30
0
        public void PackagesConfigReader_DuplicateEntries()
        {
            var doc = XDocument.Parse(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id=""test1"" version=""1.0""/>
  <package id=""test1"" version=""1.0""/>

  <package id=""test2"" version=""1.0""/>
  <package id=""test2"" version=""1.0""/>
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws <PackagesConfigReaderException>(() => reader.GetPackages());

            Assert.Equal(ex.Message, "There are duplicate packages: test1, test2");
        }
示例#31
0
        public void PackagesConfigReader_DuplicateEntriesWithNonNormalizedVersions()
        {
            // Arrange
            var doc = XDocument.Parse(
                @"<?xml version=""1.0"" encoding=""utf-8""?>
                <packages>
                  <package id=""test1"" version=""1.1.0""/>
                  <package id=""test1"" version=""1.1""/>
                </packages>");
            var reader = new PackagesConfigReader(doc);

            // Act
            var ex = Assert.Throws <PackagesConfigReaderException>(() =>
                                                                   reader.GetPackages(allowDuplicatePackageIds: true));

            // Assert
            Assert.Equal(ex.Message, "There are duplicate packages: test1.1.1.0");
        }
示例#32
0
        public IOperationResponse Detect(Project project, string nugetPackageName)
        {
            var packagesConfigPath = Path.Combine(project.Directory, "packages.config");

            if (!File.Exists(Path.Combine(packagesConfigPath)))
            {
                return(OperationResponse.Error(Resources.Info.Errors.SeedBucketProjectCouldNotBeFound));
            }

            var document = XDocument.Load(packagesConfigPath);
            var reader   = new PackagesConfigReader(document);

            return(reader
                   .GetPackages()
                   .Select(p => p.PackageIdentity.Id)
                   .Any(txt => txt.Equals(nugetPackageName, StringComparison.OrdinalIgnoreCase))
                ? OperationResponse.Success()
                : OperationResponse.Error(Resources.Info.Errors.SeedBucketProjectCouldNotBeFound));
        }
        public void PackagesConfigReader_Basic2()
        {
            var reader = new PackagesConfigReader(PackagesConf2);

            var version = reader.GetMinClientVersion();

            Assert.Equal("2.5.0", version.ToNormalizedString());

            var packageEntries = reader.GetPackages().ToArray();

            Assert.Equal(1, packageEntries.Length);
            Assert.Equal("Newtonsoft.Json", packageEntries[0].PackageIdentity.Id);
            Assert.Equal("6.0.4", packageEntries[0].PackageIdentity.Version.ToNormalizedString());
            Assert.Equal("net45", packageEntries[0].TargetFramework.GetShortFolderName());
            Assert.True(packageEntries[0].HasAllowedVersions);
            Assert.True(packageEntries[0].IsDevelopmentDependency);
            Assert.True(packageEntries[0].IsUserInstalled);
            Assert.True(packageEntries[0].RequireReinstallation);
            Assert.Equal("[6.0.0, )", packageEntries[0].AllowedVersions.ToString());
        }
        public void PackagesConfigReader_BadMinClientVersion()
        {
            var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<packages minClientVersion=""abc"">
  <package id=""test"" version=""1.0"" />
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws<PackagesConfigReaderException>(() => reader.GetMinClientVersion());
            Assert.Equal(ex.Message, "Invalid minClientVersion: 'abc'");
        }
        public void PackagesConfigReader_DuplicateEntries()
        {
            var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id=""test1"" version=""1.0""/>
  <package id=""test1"" version=""1.0""/>

  <package id=""test2"" version=""1.0""/>
  <package id=""test2"" version=""1.0""/>
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws<PackagesConfigReaderException>(() => reader.GetPackages());
            Assert.Equal(ex.Message, "There are duplicate packages: test1, test2");
        }
        public void PackagesConfigReader_InvalidAllowedVersions()
        {
            var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id=""test"" version=""1.0"" allowedVersions=""xyz""/>
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws<PackagesConfigReaderException>(() => reader.GetPackages());
            Assert.Equal(ex.Message, "Invalid allowedVersions for package id 'test': 'xyz'");
        }
        public void PackagesConfigReader_BadId()
        {
            var doc = XDocument.Parse(
@"<?xml version=""1.0"" encoding=""utf-8""?>
<packages>
  <package id="""" />
</packages>");
            var reader = new PackagesConfigReader(doc);

            var ex = Assert.Throws<PackagesConfigReaderException>(() => reader.GetPackages());
            Assert.Equal(ex.Message, "Null or empty package id");
        }