13

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

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

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

当我推送MyPackage版本的另一个更新时,问题就出现了1.0.0。当我尝试在客户端机器上重新安装它时,我得到了以前版本的包。

我发现这是本地缓存的问题:如果安装了包,它会进入本地缓存,下次安装相同版本的包时,它会从缓存中取出。很公平!

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

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

是预期的吗?是不是因为版本没改?

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

更新:我观察到奇怪的行为,我只能通过缓存过期来解释。当包被缓存时,所有nuget install从缓存中拉取包的后续调用,直到经过一段时间。我没有注意到确切的时间,但肯定是一个多小时。之后,nuget install更新缓存中的包,情况也一样了……

4

2 回答 2

12

颜,

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

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

您不应该推送多个具有特定版本的包:包应该是不可变的。如果您更改了包中的某些内容,请增加内部版本号 abC 并推送新版本的包。

我希望这种方法适合您的情况

于 2013-09-17T13:11:27.583 回答
11

颜,

我推送了 MyPackage 的另一个更新 - 仍然是 version 1.0.0

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

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

于 2013-08-16T20:41:29.167 回答