You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何标记Azure DevOps私有NuGet包为已弃用以支持dotnet/nuget检测?

检测Azure DevOps私有源中已弃用的内部NuGet包

问题背景

在Azure DevOps构建流程中,我们可以通过以下命令有效检测nuget.org上的已弃用和易受攻击NuGet包:

dotnet list "HappySolution.sln" package --deprecated --source https://api.nuget.org/v3/index.json --include-transitive
dotnet list "HappySolution.sln" package --vulnerable --source https://api.nuget.org/v3/index.json --include-transitive

但内部私有源的包无法发布至nuget.org,无法直接复用上述逻辑检测内部包是否已弃用。

原本计划生成解决方案的包列表,再与私有源「Deprecated」视图中的包对比,使用的命令为:

nuget list -source https://happy.sos/DefaultCollection/_packaging/InternalNuget@Deprecated/nuget/v3/index.json -AllVersions

但nuget list已被弃用,替代它的nuget search不支持-AllVersions选项;同时使用dotnet list指定Deprecated视图源时,始终返回无已弃用包,无法满足检测需求。


可行解决方案

1. 调用Azure DevOps包管理API获取已弃用包列表

通过API直接拉取「Deprecated」视图下的所有包及版本,再与项目依赖做对比:

  • 步骤1:获取已弃用包数据(需Azure DevOps PAT令牌授权):
    curl -u :{你的PAT令牌} "https://happy.sos/DefaultCollection/_apis/packaging/feeds/InternalNuget/views/Deprecated/packages?api-version=7.1-preview.1&includeAllVersions=true"
    
  • 步骤2:导出项目依赖包列表:
    dotnet list "HappySolution.sln" package --include-transitive --format json > project-deps.json
    
  • 步骤3:编写对比脚本(PowerShell/Python均可),解析两个文件的内容,找出项目中引用的已弃用包,触发构建警告或错误。

2. 自定义单包状态检测逻辑

在构建Pipeline中添加自定义步骤,逐个验证项目依赖包的状态:

  • 步骤1:导出项目所有依赖包:
    dotnet list "HappySolution.sln" package --include-transitive > project-packages.txt
    
  • 步骤2:遍历查询每个包的视图状态:
    针对每个包ID和版本,调用API查询其所属视图:
    curl -u :{你的PAT令牌} "https://happy.sos/DefaultCollection/_apis/packaging/feeds/InternalNuget/packages/{包ID}/versions/{包版本}?api-version=7.1-preview.1"
    
  • 步骤3:判断并触发告警:解析API返回结果,若该包版本属于「Deprecated」视图,则抛出构建警告或终止构建。

3. 使用Azure DevOps市场扩展

在Azure DevOps市场中搜索私有源包合规检测类扩展,部分扩展支持自定义视图的包检测,可直接集成到构建流程中,无需手动编写脚本。


内容的提问来源于stack exchange,提问作者thisisntjared

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 04:57:15