在Visual Studio Team Services上覆盖NuGet包存储库

21

在使用时

nuget.exe push \\share\Packages\*.nupkg -Source "https://myvsts.pkgs.visualstudio.com/_packaging/tcpcm/nuget/v3/index.json" -ApiKey VSTS

i got an

响应状态代码未表示成功:409(冲突)。

error

是否有一种方法可以覆盖已上传的所有包?

4个回答

35
有没有一种方法可以覆盖已经上传的所有软件包?
简单的答案是不能。Jonathan Myers提供了正确的文档:了解软件包的不变性
一旦您将软件包的特定版本发布到feed中,该版本号就被永久保留。您无法上传具有相同版本号的更新版本软件包,也无法删除它并上传相同版本的新软件包。
因为许多软件包客户端,包括NuGet,在您的计算机上保留了本地缓存的软件包。一旦客户端缓存了特定的package@version,它将在未来的安装/恢复请求中返回该副本。如果在服务器上使用一个新的package@version(rev 2)替换了package@version(rev 1),客户端无法区分它们。这可能会导致不同计算机上构建结果的不确定性。
因此,我们不能覆盖已经上传的所有软件包,甚至不能删除它们并重新上传。解决此问题的唯一方法是上传具有新版本的软件包

好的,谢谢提供信息。我现在所做的是将所有软件包上传到源代码中,然后创建一个构建定义来进行NuGet推送。它会推送所有软件包,并且构建任务还允许跳过已安装的软件包,非常方便。 - user5955036
2
开发和测试软件包的适当(方便)方式是什么?@IngoB,你解决了吗?每次打包和测试库时,我是否真的需要发布一个小版本号?我只是将其推送到本地文件夹。 - Nomnom

6

5
尝试在URL末尾添加?replace=true。或者你可以尝试AllowOverwriteExistingPackages=true。我不确定visualstudio.com是否已经支持此功能,但这是Octopus Deploy的NuGet服务器的工作原理。

嗨,谢谢提供信息。我已经尝试了这两种方法,但它们都不受支持。 - user5955036
1
有没有一种方法可以批量删除所有软件包,以便我可以再次推送它们? - user5955036
根据我的经验,在从源中删除一个版本为v1.1的软件包后,你仍然无法上传修订版的v1.1。 - paparush
只是为了确认一下,我在章鱼NuGet服务器上看到了相同的行为。 - ebol2000
1
您始终可以下载每个包,然后重命名该源,等待几分钟,创建一个具有旧名称的新源,然后推送除不需要的包之外的所有包 - 可以说是获取新的不可变版本号。:S - coolhandle01

0

这可能不是最佳实践,但如果您需要更新相同版本,则始终可以先删除一个包,然后使用相同版本推送更新的包。

NuGet 删除命令


这个不起作用。请查看最受欢迎的答案。 - greenback

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