public static FrameworkEntry Index(string frameworkName, IEnumerable <string> assemblyPaths)
    {
        var references = new List <MetadataReference>();

        foreach (var path in assemblyPaths)
        {
            var metadata = MetadataReference.CreateFromFile(path);
            references.Add(metadata);
        }

        var metadataContext = MetadataContext.Create(references);

        var assemblyEntries = new List <AssemblyEntry>();

        foreach (var assembly in metadataContext.Assemblies)
        {
            var entry = AssemblyEntry.Create(assembly);
            if (entry.Apis.Any())
            {
                assemblyEntries.Add(entry);
            }
        }

        return(FrameworkEntry.Create(frameworkName, assemblyEntries));
    }
    public async Task <PackageEntry> Index(string id, string version)
    {
        var dependencies     = new Dictionary <string, PackageArchiveReader>();
        var frameworkEntries = new List <FrameworkEntry>();

        try
        {
            using (var root = await _store.GetPackageAsync(id, version))
            {
                var targetNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase);

                foreach (var item in GetReferenceItems(root))
                {
                    targetNames.Add(item.TargetFramework.GetShortFolderName());
                }

                var targets = targetNames.Select(NuGetFramework.Parse).ToArray();

                if (!targets.Any())
                {
                    return(null);
                }

                foreach (var target in targets)
                {
                    var referenceGroup = GetReferenceItems(root, target);

                    Debug.Assert(referenceGroup != null);

                    await GetDependenciesAsync(dependencies, root, target);

                    // Add references

                    var referenceMetadata = new List <MetadataReference>();

                    foreach (var path in referenceGroup.Items)
                    {
                        var metadata = await AssemblyStream.CreateAsync(root.GetStream(path), path);

                        referenceMetadata.Add(metadata);
                    }

                    // Add dependencies

                    var dependencyMetadata = new List <MetadataReference>();

                    foreach (var dependency in dependencies.Values)
                    {
                        var dependencyReferences = GetReferenceItems(dependency, target);
                        if (dependencyReferences != null)
                        {
                            foreach (var path in dependencyReferences.Items)
                            {
                                var metadata = await AssemblyStream.CreateAsync(dependency.GetStream(path), path);

                                dependencyMetadata.Add(metadata);
                            }
                        }
                    }

                    // Add framework

                    var platformPaths = GetPlatformSet(target);

                    if (platformPaths == null)
                    {
                        if (!IsKnownUnsupportedPlatform(target))
                        {
                            Console.WriteLine($"error: can't resolve platform references for {target}");
                        }
                        continue;
                    }

                    foreach (var path in platformPaths)
                    {
                        var metadata = MetadataReference.CreateFromFile(path);
                        dependencyMetadata.Add(metadata);
                    }

                    var metadataContext = MetadataContext.Create(referenceMetadata, dependencyMetadata);

                    var assemblyEntries = new List <AssemblyEntry>();

                    foreach (var reference in metadataContext.Assemblies)
                    {
                        var entry = AssemblyEntry.Create(reference);
                        assemblyEntries.Add(entry);
                    }

                    frameworkEntries.Add(FrameworkEntry.Create(target.GetShortFolderName(), assemblyEntries));
                }
            }

            return(PackageEntry.Create(id, version, frameworkEntries));
        }
        finally
        {
            foreach (var package in dependencies.Values)
            {
                package.Dispose();
            }
        }
    }