首先,在所有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(_=>_)));
答案 0 :(得分:6)
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);
答案 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 要摆脱Microsoft.AspNet.WebApi.Client(依赖于Newtonsoft.Json),可以对System.Text.Json进行开箱即用(自.NET Core 3.0起),代码更改如下:>
,或者根据您自己的偏好设置使用不同的JSON解析器。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 ..
}
}
}
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)