如何托管自己的nuget v3订阅源?

如何托管自己的nuget v3订阅源?,nuget,nuget-server,Nuget,Nuget Server,我的组织有几个nuget v2订阅源(.net app consuming nuget.server),用于我们内部开发的软件包和重新托管第三方软件包(因为我们的构建机器没有internet访问,我们审计开发者在我们的产品中使用的软件包,如果我们没有软件包,我们希望构建失败) 每当我将任何需要nuget client 3.0+的包添加到我的nuget服务器时,nuget服务器就会崩溃,因为它无法从这些包中读取元数据。如何托管自己的nuget v3服务器/升级现有的nuget服务器以使其与v3兼容

我的组织有几个nuget v2订阅源(.net app consuming nuget.server),用于我们内部开发的软件包和重新托管第三方软件包(因为我们的构建机器没有internet访问,我们审计开发者在我们的产品中使用的软件包,如果我们没有软件包,我们希望构建失败)


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

我也遇到过同样的问题,并做了一些研究。你可能已经解决了你的问题,但在这里NuGet自己列出了一些备选方案;免费和付费:

简言之,清单是

  • VisualStudio团队服务
  • MyGet
  • 伊内多氏症
  • JFrog人工制品厂
  • NuGet服务器
  • 索纳型连接
我刚刚测试了ProGet,但它似乎不是v3的最新版本,即使它很容易安装和免费

我可能会切换到TeamCity原生版本,只要他们能够处理v3订阅源

目前我正在测试NuGet服务器,它可以通过

Install-Package NuGet.Server

最近,我在Visual Studio中的包管理器中为.Net 4.5.x编写了一个新的空web应用程序。

我编写了一个nuget server aspnetcore中间件

当然,实施是如此愚蠢、丑陋等等。。。

您可以在Startup.cs中进行设置

public void配置服务(IServiceCollection服务)
{
...
services.AddNugetServer(opt=>
{
opt.ApiKey=“这是用于添加或删除包的字符串”;
opt.PackageDirectory=“/path/to/your/packages”;//默认值为当前路径+“/packages”
});
...
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
...
app.UseNugetServer();
}
并访问http://您的服务器地址[:端口]/v3/index.json

出版:

dotnet nuget push-s http(s)://您的服务器地址[:port]/v3/package package.nupkg

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

✅ 免费(包括2GB存储)
✅ 支持符号
✅ 网站与搜索

目前没有稳定的发布版本(2019年9月)

✅ 免费
✅ 支持符号
✅ 网站与搜索

✅ 免费
❌ 支持符号
❌ 网站与搜索

❌ 免费
✅ 支持符号
✅ 网站与搜索

❌ 免费
✅ 支持符号
✅ 网站与搜索

❌ 免费
✅ 支持符号
✅ 网站与搜索

❌ 免费
❌ 支持符号
✅ 网站与搜索

迁移脚本

$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
}