Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.9 kB
0
Indexable
Never
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;

namespace NuGetPackageManagerExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string packageId = "Newtonsoft.Json";
            string repositoryPath = @"C:\LocalNuGetRepository";

            // Create a package source pointing to the local repository
            PackageSource localSource = new PackageSource(repositoryPath);

            // Create a package source provider with the local source
            IPackageSourceProvider packageSourceProvider = new PackageSourceProvider(new Settings());

            // Add the local source to the provider
            packageSourceProvider.AddPackageSource(localSource);

            // Create a package repository provider with the package source provider
            PackageRepositoryProvider packageRepositoryProvider = new PackageRepositoryProvider(packageSourceProvider);

            // Create a package metadata resource provider with the package repository provider
            PackageMetadataResourceProvider metadataResourceProvider = new PackageMetadataResourceProvider();

            // Create a source cache context with no cache
            SourceCacheContext sourceCacheContext = new SourceCacheContext();

            // Create a package metadata resource with the metadata resource provider
            PackageMetadataResource metadataResource = await metadataResourceProvider.TryCreatePackageMetadataResourceAsync(localSource, CancellationToken.None, sourceCacheContext);

            // Search for the package metadata
            IEnumerable<IPackageSearchMetadata> searchMetadata = await metadataResource.GetMetadataAsync(packageId, includePrerelease: false, includeUnlisted: false, Common.NullLogger.Instance, CancellationToken.None);

            // Get the latest stable version of the package
            NuGetVersion latestVersion = searchMetadata.Max(p => p.Identity.Version);

            // Create a package download context with the no cache
            PackageDownloadContext downloadContext = new PackageDownloadContext(sourceCacheContext, packageRepositoryProvider);

            // Create a package download resource with the download context
            PackageDownloadResource downloadResource = await metadataResource.GetResourceAsync<PackageDownloadResource>();

            // Download the package to the local repository
            await downloadResource.DownloadToStreamAsync(packageId, latestVersion, Console.Out, downloadContext, CancellationToken.None);

            Console.WriteLine($"Package {packageId} version {latestVersion} installed to {repositoryPath}");
        }
    }
}