从 VSTS 包提要中取消列出 nuget 包的所有版本

unlist all versions of a nuget package from VSTS package feed

我的 Visual Studio 团队服务 (VSTS) 帐户的私有包提要中有一个包,我想取消列出我的包的所有版本,因为它已被弃用并已被不同的 package.Thus 我想通过取消列出旧包来将其标记为弃用(如果可能,不要删除它)

不幸的是,我只能找到一个取消列出一个包特定版本的按钮,如here所述。以这种方式删除我的遗留包需要很长时间,因为在从我的提要中删除包之前我必须轻松取消列出 30 个版本。

我知道 nuget.org 具有通过单击取消列出软件包的所有版本的功能,我认为这是一项基本功能。有谁知道是否有技巧或隐藏按钮可以让我在 VSTS 中更轻松地取消列出包?或者可能有一个 nuget cli 命令吗?

无论是 VSTS web UI 还是 nuget cli,包都只能一个一个取消列出

取消列出包的格式为:

nuget delete <packageID> <packageVersion> [options]

但是您可以编写自己的脚本来在您的 VSTS 提要循环中取消列出包。详细步骤为:

1.使用凭据

添加 VSTS 源作为源
nuget sources add -Name "feedname" -Source "https://account.pkgs.visualstudio.com/_packaging/feedname/nuget/v3/index.json" -Username <Alternate username/email> -password <Alternate password/PAT>

2。列出 VSTS 提要中的所有包

nuget list -source feedname -AllVersions

3。循环step2得到的包,循环unlist

nuget delete packagename packageversion -source feedname -ApiKey key

我已经创建并使用以下 powershell 脚本从我的 tfs 提要中取消列出所有 nuget 包。

$nugetFeed = "http://tfs/MyTeam/_packaging/MyProject/nuget/v3/index.json"
$nugetExe = "C:\pathToNuget\nuget.exe"
$packageToDelete = "MyPackage"
$apiKey = "VSTS"

function Get-PackageVersions
{
    Param
    (
        [string]$Package,
        [string]$Feed,
        [string]$Nuget
    )

    $packageContent = & $Nuget list -Source $Feed -PreRelease -AllVersions
    $packages = $packageContent.Split([Environment]::NewLine)
    foreach($line in $packages) {
        $parts = $line.Split(' ')
        $packageName = $parts[0]
        $packageVersion = $parts[1]
        if($packageName -eq $Package) {
            $packageVersion
        }
    }
}

$versions = Get-PackageVersions -Package $packageToDelete -Feed $nugetFeed -Nuget $nugetExe
foreach($version in $versions) {
    & $nugetExe delete $packageToDelete $version -Source $nugetFeed -ApiKey VSTS $apiKey
}

TFS 包 UI 允许您使用 CTRL 或 SHIFT 类型 select 进行多重 select 和取消列出。我用它来取消列出和推广包裹。

如果你需要 nuget 的同样东西,并且从 google 来到这里,你也可以使用这个:

dotnet tool install --global NugetUnlister

然后

nuget-unlist drop PrereleaseBefore -p Some.Package --sv [0.1.3] -k somekey 

对于任何想通过 DevOps 做到这一点的人 UI。我写了一个小控制台脚本,最多标记 100 个版本(限制为 UI),然后您可以取消列出这些版本。如果你增加滚动计数器,你就不需要总是重新开始 ;)

它会自动向下滚动并等待条目加载。

(() => { let view = document.getElementsByClassName('vss-PivotBar--content')[0]; let scroll = 0; let markedElements = 0; let doit = () => { if(view.scrollTop + 500 < view.scrollHeight && markedElements < 100) { console.log('i did scroll to: ' + scroll); let list = document.getElementsByClassName('ms-List-cell'); for (var el of list) { if(el.getElementsByClassName('strike-through').length == 0) { let btn = el.getElementsByClassName('ms-Check')[0]; if(btn.className.indexOf('is-checked') == -1 && markedElements < 100) {btn.click(); markedElements++;} } }console.log(markedElements); scroll++; view.scrollTo(0, 500 * scroll); setTimeout(()=>doit(), 2000); }}; doit(); })()

取消列出所有包不需要脚本。

在 UI 中单击几下即可完成:

  1. 转到您的 Devops UI
  2. 打开 nuget 存储库
  3. 然后去 Artifacts/Packages
  4. select 你的包裹
  5. 打开 Versions 选项卡
  6. 勾选列表中的第一条记录(这样您会在它旁边看到一个圆形勾号)
  7. 向下滚动到列表末尾并勾选最后一条记录同时按住 Shift 键
  8. select Unlist 在顶部菜单

IMPORTANT NOTE: at the moment of writing there is a bug in Devops UI: if you select more than 100 records, Unlist command does not do anything. So you may need to select records in batches of 100 records (or less) to make it work!