【问题标题】:overwrite nuget packages in feed on visual studio team services在视觉工作室团队服务的提要中覆盖 nuget 包
【发布时间】:2017-06-30 10:47:41
【问题描述】:

使用中

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

我有一个

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

错误

有没有办法覆盖所有已经上传的包?

【问题讨论】:

    标签: visual-studio nuget nuget-package azure-artifacts


    【解决方案1】:

    有没有办法覆盖所有已经上传的包?

    简单的答案是否定的。Jonathan Myers 的回答指出了正确的文档:Understand immutability of packages

    一旦您将软件包的特定版本发布到供稿,该版本号将永久保留。您不能上传具有相同版本号的较新修订包,也不能将其删除并上传具有相同版本的新包。

    这是因为许多包客户端(包括 NuGet)会在您的计算机上保留包的本地缓存。一旦客户端缓存了特定的package@version,它将在未来的安装/恢复请求中返回该副本。如果在服务器上将package@version(rev 1)替换为新的package@version(rev 2),则客户端无法区分。这可能导致来自不同机器的不确定构建结果。

    因此我们无法覆盖所有已经上传的包,即使我们无法删除它们并重新上传。要解决此问题,唯一的方法是使用新版本上传软件包

    【讨论】:

    • 好的,感谢您提供的信息,我现在所做的是将所有包上传到源代码,然后为 nuget 推送创建构建定义。它推送所有包,构建任务还允许跳过已经安装的包,非常方便。
    • 那么开发和测试软件包的正确(方便)方式是什么? @IngoB 你明白了吗?每次打包和测试一个库时,我真的应该发布一个次要版本号吗?我只是在我的机器上本地推送到本地文件夹。
    【解决方案2】:

    这是 VSTS 中的 intentionally prohibited

    【讨论】:

      【解决方案3】:

      尝试在网址末尾添加?replace=true。或者你可以试试AllowOverwriteExistingPackages=true

      我不确定visualstudio.com 是否已经supports 这个,但这就是 Octopus Deploy 的 NuGet 服务器的工作方式。

      【讨论】:

      • 嘿,谢谢您的信息,我已经尝试过这两种方法,但它们不受支持
      • 有没有办法批量删除所有包,以便我可以再次推送它们?
      • @IngoB 根据我的经验,从提要中删除包 v1.1,您仍然无法上传修订后的 v1.1。
      • 确认一下,我在 Octopus NuGet 服务器上看到了相同的行为。
      • 您可以随时下载每个包,然后重命名提要,等待几分钟,使用旧名称创建一个新提要,然后推送除您不想要的包之外的所有包 - 获取可以说是一组新的不可变版本号。 :S
      猜你喜欢
      • 2017-04-06
      • 2016-07-21
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多