コード例 #1
0
        private NuGetPackage CreateNuGetPackageFromXmlPackageElement(XElement xmlPackageElement)
        {
            NuGetPackage nuGetPackage = new NuGetPackage();

            nuGetPackage.Id      = xmlPackageElement.Attribute(Constants.IdAttribute).Value;
            nuGetPackage.Version = xmlPackageElement.Attribute(Constants.VersionAttribute).Value;

            return(nuGetPackage);
        }
コード例 #2
0
        public bool PackageExists(string packageId, string projectFilePath)
        {
            string packagesConfigFilePath = this.GetPackagesConfigFilePathForProject(projectFilePath);

            NuGetPackage nuGetPackage = this.packagesConfigFileEditor.FindPackage(packagesConfigFilePath, packageId);

            if (nuGetPackage != null)
            {
                return(true);
            }

            return(false);
        }
コード例 #3
0
        public NuGetPackage FindPackage(string packagesConfigFilePath, string packageId)
        {
            NuGetPackage nuGetPackage = null;

            base.ReadFile(packagesConfigFilePath, (doc) =>
            {
                IEnumerable <XElement> xmlPackageElements = doc.Element(Constants.PackagesElem)
                                                            .Elements(Constants.PackageElem);

                XElement xmlPackageElement = xmlPackageElements.FirstOrDefault(p => p.Attribute(Constants.IdAttribute).Value == packageId);

                if (xmlPackageElement != null)
                {
                    nuGetPackage = this.CreateNuGetPackageFromXmlPackageElement(xmlPackageElement);
                }
            });

            return(nuGetPackage);
        }
コード例 #4
0
        public NuGetPackage FindPackage(string packagesConfigFilePath, string packageId)
        {
            NuGetPackage nuGetPackage = null;

            base.ReadFile(packagesConfigFilePath, (doc) =>
            {
                IEnumerable <XElement> packages = doc.Element(Constants.PackagesElem)
                                                  .Elements(Constants.PackageElem);

                XElement package = packages.FirstOrDefault(p => p.Attribute(Constants.IdAttribute).Value == packageId);

                if (package != null)
                {
                    nuGetPackage         = new NuGetPackage();
                    nuGetPackage.Id      = package.Attribute(Constants.IdAttribute).Value;
                    nuGetPackage.Version = package.Attribute(Constants.VersionAttribute).Value;
                }
            });

            return(nuGetPackage);
        }
コード例 #5
0
        public async Task <NuGetPackage> GetPackageWithFullDependencyTree(string id, string version, IEnumerable <string> sources, Regex supportedFrameworksRegex = null)
        {
            // First, try to retrieve the data from the local cache
            var packageDependenciesHashFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LocalPackagesInfoCacheFolder, string.Concat(id, version));

            if (File.Exists(packageDependenciesHashFilePath))
            {
                return(JsonConvert.DeserializeObject <NuGetPackage>(File.ReadAllText(packageDependenciesHashFilePath)));
            }

            XDocument nuGetPackageXmlDoc = await this.GetPackageXmlDocument(id, version, sources);

            if (nuGetPackageXmlDoc == null)
            {
                return(null);
            }

            XElement propertiesElement = nuGetPackageXmlDoc
                                         .Element(this.xmlns + Constants.EntryElem)
                                         .Element(this.xmlnsm + Constants.PropertiesElem);

            NuGetPackage nuGetPackage = new NuGetPackage();

            nuGetPackage.Id = nuGetPackageXmlDoc
                              .Element(this.xmlns + Constants.EntryElem)
                              .Element(this.xmlns + Constants.TitleElem).Value;

            nuGetPackage.Version = propertiesElement.Element(this.xmlnsd + Constants.VersionElem).Value;

            string dependenciesString = propertiesElement.Element(this.xmlnsd + Constants.DependenciesElem).Value;

            if (!string.IsNullOrWhiteSpace(dependenciesString))
            {
                string[] dependencyStrings = dependenciesString.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

                if (dependencyStrings.Length > 0)
                {
                    foreach (string dependencyString in dependencyStrings)
                    {
                        // Do Not RemoveEmtpyEntires below. The entry from the framework is the last element in the dependencyString
                        // e.g.System.ComponentModel.Annotations:4.7.0:net48 if it is missing System.ComponentModel.Annotations:4.7.0:
                        // If it is missing it means that the package does not depend on particular framework
                        string[] dependencyIdAndVersionAndFramework = dependencyString.Split(new char[] { ':' });

                        if (dependencyIdAndVersionAndFramework.Length > 0 && !string.IsNullOrWhiteSpace(dependencyIdAndVersionAndFramework[0]))
                        {
                            bool isFrameworkSupported = true;
                            if (supportedFrameworksRegex != null && dependencyIdAndVersionAndFramework.Length > 2)
                            {
                                string framework = dependencyIdAndVersionAndFramework[2].Trim();
                                if (!string.IsNullOrEmpty(framework))
                                {
                                    isFrameworkSupported = supportedFrameworksRegex.IsMatch(framework);
                                }
                            }

                            if (isFrameworkSupported)
                            {
                                string dependencyId = dependencyIdAndVersionAndFramework[0].Trim();

                                string   dependencyVersionString = dependencyIdAndVersionAndFramework[1].Trim();
                                string[] dependencyVersions      = this.ParseVersionString(dependencyVersionString);
                                string   dependencyVersion       = dependencyVersions[0];

                                NuGetPackage nuGetPackageDependency = await this.GetPackageWithFullDependencyTree(dependencyId, dependencyVersion, sources, supportedFrameworksRegex);

                                if (nuGetPackageDependency != null)
                                {
                                    nuGetPackage.Dependencies.Add(nuGetPackageDependency);
                                }
                            }
                        }
                    }
                }
            }

            // Include the current package in the local cache
            Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LocalPackagesInfoCacheFolder));
            File.WriteAllText(packageDependenciesHashFilePath, JsonConvert.SerializeObject(nuGetPackage));

            return(nuGetPackage);
        }
コード例 #6
0
        private string GetNuGetPackageDir(string solutionDir, NuGetPackage nuGetPackage)
        {
            string nuGetPackageFolderName = $"{nuGetPackage.Id}.{nuGetPackage.Version}";

            return(Path.Combine(solutionDir, PackagesFolderName, nuGetPackageFolderName));
        }