如何从nuget feed以编程方式获取nuget包版本?

时间:2014-10-31 15:08:21

标签: c# nuget

首先,在所有Nuget代码中,我试图找出要引用的代码。

主要问题是,给定一个Nuget包名称,是否有一种编程方式从nuget feed中检索版本以及一般消费的最新版本?

例如,给定ILMerge的包名称,获得2.13.307的最新包版本会很不错。

//pseudo code, makes a lot of assumptions about nuget programmatic interfaces
PackageRef currentVersion = nugetlib.getpackageinfo(args[0]);
Console.WriteLine("Package Id: '{0}':", pkg.Id);
Console.WriteLine("  Current version: {0}", pkg.Version);
Console.WriteLine("  Available versions: {0}", String.Join(",",pkg.Versions.Select(_=>_)));

3 个答案:

答案 0 :(得分:6)

使用nuget core package

string packageID = "ILMerge";

//Connect to the official package repository
IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository("https://packages.nuget.org/api/v2");
var version =repo.FindPackagesById(packageID).Max(p=>p.Version);

参考:http://blog.nuget.org/20130520/Play-with-packages.html

答案 1 :(得分:1)

https://github.com/NuGet/NuGet2所述 Nuget.Core适用于NuGet的第2版。

Nuget客户端库的第3版已移至Nuget.Client。有关更多信息,请参阅NuGet API v3文档。 https://docs.microsoft.com/pl-pl/nuget/reference/nuget-client-sdk

答案 2 :(得分:1)

存在一个很好的NuGet API来完成这两个任务。

a)检索NuGet软件包版本(在以下示例中为Newtonsoft.Json软件包):

GET https://api.nuget.org/v3-flatcontainer/Newtonsoft.Json/index.json

b)下载特定版本的NuGet软件包-例如

GET https://api.nuget.org/v3-flatcontainer/utf8json/1.3.7/utf8json.1.3.7.nupkg

请尝试将URL复制到浏览器,您将看到示例的结果...

要获取有关API的更多信息,请访问 Package Content

以下代码示例可以读取包的版本(使用Microsoft.AspNet.WebApi.Client NuGet包,该包提供HttpContent的ReadAsAsync 扩展名,用于将JSON结果解析为适当的类-本示例中为VersionsResponse)

using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace GetNuGetVer
{
    class VersionsResponse
    {
        public string[] Versions { get; set; }
    }

    class Program
    {
        static async Task Main(string[] args)
        {
            var packageName = "Enums.NET";
            var url = $"https://api.nuget.org/v3-flatcontainer/{packageName}/index.json";
            var httpClient = new HttpClient();
            var response = await httpClient.GetAsync(url);
            var versionsResponse = await response.Content.ReadAsAsync<VersionsResponse>();
            var lastVersion = versionsResponse.Versions[^1]; //(length-1)
            // And so on ..
        }
    }
}

要摆脱Microsoft.AspNet.WebApi.Client(依赖于Newtonsoft.Json),可以对System.Text.Json进行开箱即用(自.NET Core 3.0起),代码更改如下:

        using System.Text.Json;
        ...
        var response = await httpClient.GetAsync(url);
        var versionsResponseBytes = await response.Content.ReadAsByteArrayAsync();
        var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
        var versionsResponse = JsonSerializer.Deserialize<VersionsResponse>(versionsResponseBytes, options);
        var lastVersion = versionsResponse.Versions[^1]; //(length-1)

,或者根据您自己的偏好设置使用不同的JSON解析器。