今天我在安装软件包时遇到了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
更新缓存中的包,情况变得相同......
答案 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期望能够无限期地缓存给定包版本的副作用。