首页 文章

NuGet如何决定是否使用本地包缓存?

提问于
浏览
13

今天我在安装软件包时遇到了NuGet的奇怪行为 .

简要说明:作为我的构建脚本的结果,每次都会更改版本,因此每个构建都会生成 MyPackage.1.0.0.nupkg . 作为构建的最后一步,我将包推送到本地网络内部署的NuGet服务器 .

现在,在另一台机器上,我运行 nuget install MyPackage -Source http://myserver/nuget ,显然安装了NuGet包 .

当我推送 MyPackage 的另一个更新时仍然会出现问题 - 仍然是版本 1.0.0 . 当我尝试在客户端计算机上重新安装它时,我得到了以前版本的软件包 .

我发现it is the local cache to be blamed:如果软件包已安装,它会进入本地缓存,下次安装软件包 of the same version 时,它将从缓存中获取 . 很公平!

但是,另一方面, nuget install 命令有一个 -NoCache 选项,我希望它忽略本地缓存 .

但是,事实并非如此 . 我第一次使用 -NoCache 运行它时,它会更新缓存并安装真正的最新版本 . 但是,下次仍然从缓存中获取包,即使使用 -NoCache 选项 .

这是预期的吗?是因为版本没有改变?

以防万一:所有NuGet操作都是通过 NuGet.exe 和PowerShell会话完成的 .

UPDATE :我观察到奇怪的行为我只能通过缓存过期来解释 . 缓存包时,对 nuget install 的所有后续调用都会从缓存中拉出包 until some time passes . 我确实没有超过一个小时 . 在此之后, nuget install 更新缓存中的包,情况变得相同......

2 回答

  • 10

    严,

    我推送MyPackage的另一个更新 - 仍然是版本1.0.0 .

    您不应该使用特定版本推送多个包:包应该是不可变的 . 如果您更改了包中的内容,请增加内部版本号 a.b.C 并推送新版本的包 .

    您遇到的行为是NuGet期望能够无限期地缓存给定包版本的副作用 .

  • 12

    严,

    NuGet将其下载的软件包缓存在本地硬盘上 . 对于我的Windows 7机器,缓存位于C:\ Users \ jmelosegui \ AppData \ Local \ NuGet \ Cache . 因此,您可以从本地缓存目录中删除要忘记的nuget包 . 然后,下次安装软件包时,您将从服务器获得最新版本 .

    顺便说一句:我同意@ matthew-skelton .

    您不应该使用特定版本推送多个包:包应该是不可变的 . 如果您更改了包中的内容,请增加内部版本号a.b.C并推送新版本的包 .

    我希望这种方法适合你的场景

相关问题