从VSTS包源取消列出nuget包的所有版本

从VSTS包源取消列出nuget包的所有版本,nuget,azure-devops,nuget-server,Nuget,Azure Devops,Nuget Server,我的Visual Studio Team Services(VSTS)帐户的私有包源中有一个包,我希望取消列出我的包的所有版本,因为它已被弃用,并已被其他包取代。因此,我希望通过取消列出旧包来将其标记为弃用(如果可能,不要删除它) 不幸的是,我所能找到的只是一个按钮,它取消了包的一个特定版本的列表,如所述。以这种方式删除我的遗留软件包需要很长时间,因为在从提要中删除软件包之前,我必须轻松地取消列出30个版本 我知道NuGET.ORG有一个功能,只需单击一次就可以删除所有版本的包,我认为它是一个基

我的Visual Studio Team Services(VSTS)帐户的私有包源中有一个包,我希望取消列出我的包的所有版本,因为它已被弃用,并已被其他包取代。因此,我希望通过取消列出旧包来将其标记为弃用(如果可能,不要删除它)

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


我知道NuGET.ORG有一个功能,只需单击一次就可以删除所有版本的包,我认为它是一个基本功能。有人知道是有一个技巧还是隐藏的按钮,让我可以更容易地在VST中取消列出包?或者可能有nuget cli命令吗?

无论是通过VSTS web UI还是nuget cli,软件包只能逐个取消列出

取消列出包的格式为:

nuget delete <packageID> <packageVersion> [options]
3。循环第2步中得到的包,并取消循环中的列表

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类型选择进行多选和取消列表。我用它来取消列表和推广软件包。

如果你需要nuget的相同功能,并且是从谷歌来的,你也可以使用它:

dotnet tool install --global NugetUnlister
然后

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

无论谁想通过DevOps用户界面实现这一点。我编写了一个小控制台脚本,它最多可以标记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(); })()
(()=>{let view=document.getElementsByClassName('vss-PivotBar--content')[0];let scroll=0;let markedElements=0;let doit=()=>{if(view.scrollTop+500doit(),2000)};doit();}()

无需脚本即可取消所有软件包的列表

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

  • 转到您的Devops UI
  • 打开nuget存储库
  • 然后转到
    Artifacts/Packages
  • 选择您的软件包中的
  • 打开
    Versions
    选项卡
  • 勾选列表中的第一条记录(因此您将在其旁边看到一个圆形勾号)
  • 在按住Shift键的同时,向下滚动到列表的末尾并勾选最后一条记录
  • 选择顶部菜单中的
    Unlist
  • 重要提示:在撰写本文时,Devops UI中存在一个错误:如果选择的记录超过100条,Unlist命令将不起任何作用。因此,您可能需要批量选择100条(或更少)记录才能正常工作


    遗憾的是没有简单的方法,但你是对的,剧本会适合我的。谢谢!
    nuget-unlist drop PrereleaseBefore -p Some.Package --sv [0.1.3] -k somekey 
    
    (() => { 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(); })()