如何托管我自己的 nuget v3 提要?

How do I host my own nuget v3 feed?

我的组织有几个 nuget v2 提要(.net 应用程序消耗 nuget.server)用于我们内部开发的包和重新托管第三方包(因为我们的构建机器没有互联网访问权限,我们审计什么开发人员在我们的产品中使用的包,如果我们没有包,他们希望构建失败)。

每当我将任何需要 nuget 客户端 3.0+ 的包添加到我的 nuget 服务器时,nuget 服务器就会崩溃,因为它无法从这些包中读取元数据。我如何托管我自己的 nuget v3 服务器/将我现有的 nuget 服务器升级为与 v3 兼容?

我遇到了同样的问题,并且做了一些研究。您可能已经解决了您的问题,但这里 NuGet 自己列出了一些可供研究的备选方案;免费和付费: Hosting Your Own NuGet Feeds

简而言之,列表是

  • Visual Studio 团队服务
  • MyGet
  • Inedo 的 ProGet
  • JFrog 的 Artifactory
  • NuGet 服务器
  • Sonatype 的 Nexus

我刚刚测试了 ProGet,但它似乎不是最新的 v3,即使它很容易安装和免费。

一旦他们获得处理 v3 提要的功能,我可能会切换到 TeamCity 本机。

目前我正在测试可以通过

作为包下载的 NuGet 服务器
Install-Package NuGet.Server

在 Visual Studio 的包管理器中,在 .Net 4 的新的空 Web 应用程序中。5.x。

最近写了一个nuget server aspnetcore中间件

当然,实现是如此愚蠢、丑陋等等...... link

您可以在Startup.cs

中进行设置
public void ConfigureServices( IServiceCollection services )
{
    ...
    services.AddNugetServer(opt=>
    {
        opt.ApiKey = "This is a string used for adds or deletes your package(s)";
        opt.PackageDirectory = "/path/to/your/packages"; //default is current path + "/packages"
    });
    ...
}

public void Configure( IApplicationBuilder app, IHostingEnvironment env )
{
    ...
    app.UseNugetServer();
}

并访问 http(s)://your-server-address[:port]/v3/index.json

发布:

dotnet nuget push -s http(s)://your-server-address[:port]/v3/package package.nupkg

我检查了一些产品,我最喜欢的是 Azure DevOps Services

Azure DevOps Services

✅ free (2GB Storage included)
✅ support symbols
✅ website with a search

BaGet 目前没有可用的稳定版本(2019 年 9 月)

✅ free
✅ support symbols
✅ website with a search

NuGet Server

✅ free
❌ support symbols
❌ website with a search

MyGet

❌ free
✅ support symbols
✅ website with a search

Inedo's ProGet

❌ free
✅ support symbols
✅ website with a search

JFrog's Artifactory

❌ free
✅ support symbols
✅ website with a search

Sonatype's Nexus

❌ free
❌ support symbols
✅ website with a search

迁移脚本

$source = "http://oldnuget-server.mydomain.com/nuget"
$destination = "https://pkgs.dev.azure.com/MYCOMPANY/_packaging/MYCOMPANY/nuget/v3/index.json"

(& .\nuget.exe list -AllVersions -Source $source).Split([Environment]::NewLine) | % {
  $id = $_.Split(" ")[0].Trim()
  $version = $_.Split(" ")[1].Trim()

  $path = [IO.Path]::Combine("Packages", $id, $version, "${id}.${version}.nupkg")

  Write-Host "nuget.exe push -Source $destination ""$path"""
  & .\nuget.exe push -Source $destination $path -ApiKey XXXX-XXXXX
}