GetDependencyTreeHierarchyAsync
        (
        )
        {
            #if DEBUG
            w.Indent++;
            await w.WriteLineAsync($" id = {this.PackageId}");
            #endif

            List <NuGetPackage> dependencies = null;

            if (null == PackageSearchMetadata)
            {
                PackageSearchMetadata = await this.GetPackageSearchMetadataAsync();
            }

            foreach (IPackageSearchMetadata psm in PackageSearchMetadata)
            {
                if (!psm.Identity.Version.OriginalVersion.Contains(this.VersionTextual))
                {
                    continue;
                }

                foreach (PackageDependencyGroup ds in psm.DependencySets)
                {
                    global::NuGet.Frameworks.NuGetFramework tf = ds.TargetFramework;

                    if (tf.DotNetFrameworkName.ToLower().Contains("monoandroid"))
                    {
                        foreach (global::NuGet.Packaging.Core.PackageDependency p in ds.Packages)
                        {
                            if (null == dependencies)
                            {
                                dependencies = new List <NuGetPackage>();
                            }

                            string id = p.Id;
                            global::NuGet.Versioning.VersionRange vr = p.VersionRange;
                            string vrpp = vr.PrettyPrint();

                            NuGetPackage np = new NuGetPackage()
                            {
                                PackageId              = id,
                                VersionTextual         = vr.MinVersion.ToFullString(),
                                DependencyVersionRange = vrpp,
                                DependencyOf           = this,
                            };

                            np.Dependencies = await np.GetDependencyTreeHierarchyAsync();

                            dependencies.Add(np);
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                this.Dependencies = dependencies;
            }

            return(dependencies);
        }