C# 如何自动检测我的NuGet软件包是否是最新的?

C# 如何自动检测我的NuGet软件包是否是最新的?,c#,msbuild,nuget,build-process,nuget-package,C#,Msbuild,Nuget,Build Process,Nuget Package,如果我的项目使用的依赖项已经过时,我希望在某个地方得到响亮的警告(我可能会将其挂接到构建中,因此使用某些过时依赖项的构建会自动失败,并且无法部署) 如果可能的话,首先我只想对其他内部项目的依赖性执行此操作,这样,如果我发布了共享内部库的新版本,所有使用该库的其他项目都会得到通知/需要更新到新版本,但是,我们不必在每次实体框架升级时立即升级到最新版本 是否有一种方法可以从package manager控制台或使用MSBuild任务轻松检查my NuGet依赖项的所有或子集是否是最新的?您可以在Nu

如果我的项目使用的依赖项已经过时,我希望在某个地方得到响亮的警告(我可能会将其挂接到构建中,因此使用某些过时依赖项的构建会自动失败,并且无法部署)

如果可能的话,首先我只想对其他内部项目的依赖性执行此操作,这样,如果我发布了共享内部库的新版本,所有使用该库的其他项目都会得到通知/需要更新到新版本,但是,我们不必在每次实体框架升级时立即升级到最新版本


是否有一种方法可以从package manager控制台或使用MSBuild任务轻松检查my NuGet依赖项的所有或子集是否是最新的?

您可以在NuGet上获得所有已安装软件包和最新版本的列表

为此,我创建了一个PowerShell脚本。你可以在这里找到它:


如果需要,可以手动查询NuGet的公共API以检索包信息。他们有一个更新的JSON api,我可以在NodeJS应用程序中使用,他们有一个旧的XML api

JSON api

软件包的所有版本

版本的特定软件包

(请记住,URL中的包ID必须全部小写!)


XML api

所有软件包(第页-前100页):

下一页,共100页: ?$skip=100

版本的特定软件包


对于XML版本,我不知道如何列出软件包的所有版本,但是当您访问版本化的软件包时,
有一个布尔值(我不确定区别是什么……也许有一个不包括预发布版本?)

另一种选择是使用nuget.org软件包网页底部的RSS源。

到底是什么推动了这一点?你想实现什么?我在多个团队中工作,我们使用各种通用组件。非常重要的是,我们不要部署两个具有不同版本的某些常见组件的项目,我希望我们的构建管道能够提供尽可能多的安全性,当人们错过了更新时,大声通知他们。为什么在构建时必须有相同版本的组件?听起来您最好将共享组件作为一项单独的服务进行分离。恐怕这不太实际:额外的网络往返对性能的影响在这方面是不可行的,即使是在一个数据中心内,而且与仅共享DLL相比,这会给系统增加相当多的复杂性。它必须在过程中完成。我们可能会在稍后研究热交换DLL,以便在部署环境中独立管理依赖关系,但不是在短期内。我想澄清一下,因为这个答案帮助我找到了一个解决方案-为JSON API提供的链接略有不同(可能自回答时起发生了变化)。/registration0/属性应为/registration3/。不确定更改何时发生(并且注册0不再出现在v3 API中)。它给我带来的不同是,我使用API来查看包的最新版本。例如,Newtonsoft.Json在/registration0/中的版本10.0.2处结束,而在/registration3/中的版本12.0.1-beta2(在编写本文时准确)。干杯