【问题标题】:NuGet update with empty "packages" directory使用空的“包”目录进行 NuGet 更新
【发布时间】:2014-04-09 08:03:29
【问题描述】:

我正在使用带有位于所选目录中的本地提要的 NuGet 包。我们称它为 RepositoryDir。我在这里将自己构建的结果作为 nuget 包推送。此外,我还有多个相互引用的解决方案(作为 nuget 包)

我需要完成的是这样的情况:

1. 考虑两个解决方案 A 和 B。B 需要构建一个包。 2.构建解决方案A并使用nuget.exe将A.1.1.0.0.nupkg推送到RepositoryDir 3. 清除 B 解决方案
的 packages 文件夹的内容(例如清除 B/packages 目录,A.1.0.0.0.nupkg)。 4. 在 B 解决方案中更新 A 库。
nuget.exe 更新 B.sln -Source ../RepositoryDir 5.在B方案中安装A库
nuget.exe restore B.sln -Source ../RepositoryDir

我在 3. 中有这个假设,因为在 TeamCity 服务器上,更新期间会提供空包目录。

阻止这个方案工作的实际上是 nuget update 说:

在 '..\packages' 中寻找已安装的软件包

这意味着 nuget 不会为 B 解决方案更新 A 库,因为包目录中没有以前版本的 A。为什么会这样?我认为 nuget 会查找 packages.config 并在此处查找要更新的库。

有没有办法在 B 构建期间始终下载最新版本的 A?

【问题讨论】:

    标签: teamcity nuget nuget-package


    【解决方案1】:

    当 NuGet 更新包时,它将卸载旧包,然后安装新包。为了卸载旧包,它需要包中的信息,例如包含哪些引用,因此它可以卸载项目中的所有内容。 packages.config 文件中没有该信息。在 Visual Studio 中使用 NuGet 更新包或从命令行使用“nuget.exe 更新”时会出现这种情况。

    因此,您需要更改列表中的顺序,并在更新包之前恢复正在执行的 B 包。

    【讨论】:

    • 感谢您的回复!所以......事实上,当我在更新之前进行恢复时,RepositoryDir 中应该有 A.1.0.0.0.nupkg?在 TeamCity 上构建时,我认为只有最新版本的 A 可用,所以这似乎是不可能的。
    • Restore 将下拉当前安装在您项目中的 NuGet 包,即 A.1.0.0.0.nupkg。然后 nuget 更新将安装 A.1.1.0.0.nupkg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多