/// <summary>
        /// Gets the requirements.
        /// </summary>
        /// <param name="nuGetPackage">The NuGet package.</param>
        /// <returns>
        /// The requirements.
        /// </returns>
        protected Models.Umbraco.UmbPackageInfoPackageRequirements GetRequirements(Models.NuGet.Package nuGetPackage)
        {
            var dependencies = nuGetPackage.Metadata.Dependencies.Items.OfType <Models.NuGet.DependencyGroup>().SelectMany(dg => dg.Dependency)
                               .Union(nuGetPackage.Metadata.Dependencies.Items.OfType <Models.NuGet.Dependency>());

            var umbracoDependency = dependencies.FirstOrDefault(d => d.Id == "UmbracoCms") ?? dependencies.FirstOrDefault(d => d.Id == "UmbracoCms.Core");

            if (umbracoDependency != null && Version.TryParse(umbracoDependency.Version, out Version umbracoVersion))
            {
                return(new Models.Umbraco.UmbPackageInfoPackageRequirements()
                {
                    Major = (byte)umbracoVersion.Major,
                    Minor = (byte)umbracoVersion.Minor,
                    Patch = (byte)umbracoVersion.Build
                });
            }

            return(null);
        }
        /// <summary>
        /// Gets the files.
        /// </summary>
        /// <param name="nuGetPackage">The NuGet package.</param>
        /// <returns>
        /// The files.
        /// </returns>
        protected IEnumerable <Models.Umbraco.UmbPackageFile> GetFiles(Models.NuGet.Package nuGetPackage)
        {
            // Return library (bin) files with framework preference
            var libFrameworkFiles = nuGetPackage.Files.Where(f => f.Target.StartsWith("lib\\")).GroupBy(f => f.Target.Split('\\')[1]).ToDictionary(fg => fg.Key, fg => fg.AsEnumerable());

            foreach (var framework in new[] { "net45", "netstandard1.1", "netstandard1.0", "net403", "net40", "net35", "net20", "net11" })
            {
                if (libFrameworkFiles.TryGetValue(framework, out IEnumerable <Models.NuGet.PackageFile> libFiles))
                {
                    foreach (var libFile in libFiles)
                    {
                        var target = "bin" + libFile.Target.Substring(("lib\\" + framework).Length);

                        yield return(new Models.Umbraco.UmbPackageFile()
                        {
                            Guid = libFile.Src,
                            OrgPath = Path.GetDirectoryName(target).Replace("\\", "/"),
                            OrgName = Path.GetFileName(target)
                        });
                    }

                    break;
                }
            }

            // Return content files
            var contentFiles = nuGetPackage.Files.Where(f => f.Target.StartsWith("content\\"));

            foreach (var contentFile in contentFiles)
            {
                var target = contentFile.Target.Substring("content\\".Length);

                yield return(new Models.Umbraco.UmbPackageFile()
                {
                    Guid = contentFile.Src,
                    OrgPath = Path.GetDirectoryName(target).Replace("\\", "/"),
                    OrgName = Path.GetFileName(target)
                });
            }
        }