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

时间:2013-02-04 17:07:10

标签: versioning nuget nuget-package

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

简要说明:作为我的构建脚本的结果,有一个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:如果软件包已安装,它会进入本地缓存,并且下次安装相同版本的软件包时,它将从缓存中获取。足够公平!

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

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

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

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

UPDATE :我观察到奇怪的行为,我只能通过缓存过期来解释。缓存程序包后,对nuget install的所有后续调用都会从缓存中提取程序包,直到某个时间过去。我没注意到确切的时间段,但肯定超过一个小时。在此之后,nuget install更新缓存中的包,情况变得相同......

2 个答案:

答案 0 :(得分:12)

严,

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

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

  

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

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

答案 1 :(得分:10)

严,

  

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

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

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