使用NuGet.Core以编程方式推送NuGet包

rh0*_*005 9 c# nuget nuget-package

我目前正在使用命令行工具打包一些文件并将它们推送到我们的一台服务器上的NuGet Feed中.我没有使用命令行工具,而是使用Nuget.Core设置了一个项目,并成功设法创建了一个包.我现在正试图通过NuGet.Core将我的机器上的软件包推送到NuGet feed.使用看起来像这样的命令行工具(我也得到了它):

nuget.exe push package.nupkg -ApiKey MYAPIKEY -Source http://nugetpackagefeedaddress
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用NuGet.Core复制推送功能.我到目前为止最接近的是获取两个存储库PackageRepositoryFactory,一个用于本地计算机路径,另一个用于包源,然后从本地一个包中检索包,并尝试将其添加到Feed中,如下所示:

var remoteRepo = PackageRepositoryFactory.Default.CreateRepository("myNugetPackagefeedUrl");
var localRepo = PackageRepositoryFactory.Default.CreateRepository(@"locationOfLocalPackage");
var package = localRepo.FindPackagesById("packageId").First();
remoteRepo.AddPackage(package);
Run Code Online (Sandbox Code Playgroud)

此代码导致NotSupportedException声明"不支持指定的方法"

是否可以使用NuGet.Core推送包?以上代码我是否接近它?

注意:我知道我可以将调用包装到nuget.exe并从.NET调用,但是我要么从NuGet.Core打包并推送,要么通过将调用包装到nuget.exe而不是一半来执行.半

rh0*_*005 11

所以事实证明我完全是在错误的地方.我想的方法是PushPackagePackageServer

代码现在看起来像这样

var localRepo = PackageRepositoryFactory.Default.CreateRepository(@"locationOfLocalPackage");
var package = localRepo.FindPackagesById("packageId").First();
var packageFile = new FileInfo(@"packagePath");
var size = packageFile .Length;
var ps = new PackageServer("http://nugetpackagefeedaddress", "userAgent");
ps.PushPackage("MYAPIKEY", package, size, 1800, false);
Run Code Online (Sandbox Code Playgroud)

我不确定在newing up时userAgent参数的最佳值是多少PackageServer.同样,如果有人对超时或disableBuffering参数的含义有任何建议,请告诉我(例如以ms为单位的超时,秒等)

PushPackage方法签名如下所示:

void PackageServer.PushPackage(string apiKey, IPackage package, long packageSize, int timeout, bool disableBuffering)
Run Code Online (Sandbox Code Playgroud)