复制官方NuGet软件包存储库

15
我所在的公司有一个难以搞定的代理服务器,经常使得NuGet包管理器窗口不可用(命令行也是如此)。我已经开始将我们最常使用的包复制到网络共享上的本地镜像中,但手动操作变得很繁琐。我已经尝试使用PowerShell自动下载这些包,但似乎无法显示超过几个包的OData URI。例如运行以下查询:
$feed = [xml]$webClient.DownloadString("http://feed.nuget.org/ctp2/odata/v1/Packages?$filter=startswith(Title,'O') eq true&$top=100")
应该返回以'O'开头的前100个包,但是没有任何包被返回。奇怪的是,对于那些通过点击http://feed.nuget.org/ctp2/odata/v1/Packages获取到的默认包列表中的包名却可以正常工作。我猜测可能存在分页问题,只查询了第一页的内容。尝试更改参数,但好像无法切换到下一页...
有其他人尝试过这样做吗?有其他人注意到使用nuget时出现超时或错误请求的情况吗?
3个回答

9

那是一个很棒的答案。我使用了ps脚本。后来我使用了Nuget.Downloader。但今天我发现,它们都不起作用了...所以,先生;您有这个问题的更新答案吗? - Lost_In_Library

3
我的建议是使用New-ODataServiceProxy或者Doug Finke的PSOdata项目。只需使用代理函数,你就可以这样做:
New-ODataServiceProxy http://packages.nuget.org/v1/FeedService.svc/ NuGet
 # Chain up calls to AddQueryOption (please excuse my line wrapping):
$NuGet.Packages.AddQueryOption( '$filter',"startswith(Title,'O') eq true"
              ).AddQueryOption( '$top','3' ) |
Format-Table Id, Version, Authors, Description -Wrap -Auto

2

在使用双引号中的字符串时,需要小心。尝试先评估URL,或仅使用部分内容:

PS> "?$filter=startswith(Title,'O') eq true&$top=100"
?=startswith(Title,'O') eq true&=100

PS> "?`$filter=startswith(Title,'O') eq true&`$top=100"
?$filter=startswith(Title,'O') eq true&$top=100

使用反引号转义美元符号。

然后我尝试使用(希望是)正确的URL查询该网站,但没有返回结果。因此 - 仍然没有运气,服务可能存在问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接