今天,我在安装软件包时遇到了 NuGet 的奇怪行为。
简要描述:作为我的构建脚本的结果,有一个 NuGet 包。我不会每次都更改版本,因此每个构建都会产生MyPackage.1.0.0.nupkg
。作为构建的最后一步,我将包推送到部署在本地网络内的 NuGet 服务器。
现在,在另一台机器上,我运行nuget install MyPackage -Source http://myserver/nuget
,这显然会安装 NuGet 包。
当我推送另一个更新时,问题就出现了MyPackage
- 仍然是版本1.0.0
。当我尝试在客户端计算机上重新安装它时,我得到了该软件包的先前版本。
我发现这是本地缓存的罪魁祸首 http://nuget.codeplex.com/wikipage?title=Machine%20Level%20Cache%20Part%201:如果安装了该包,它会进入本地缓存,下次安装该包时相同版本的安装后,它是从缓存中获取的。很公平!
但是,另一方面,有一个-NoCache
的选项nuget install
命令,我希望它忽略本地缓存。
然而,事实并非如此。我第一次运行它-NoCache
,它会更新缓存并安装真正的最新版本。但是,下次仍然从缓存中获取包,即使使用-NoCache
option.
是预期的吗?是不是版本没改的原因?
以防万一:所有 NuGet 操作均通过NuGet.exe
以及来自 PowerShell 会话。
UPDATE:我观察到奇怪的行为,我只能用缓存过期来解释。当包被缓存后,所有后续调用nuget install
从缓存中提取包,直到一段时间过去。具体时间我没注意,但肯定是一个多小时了。在这之后,nuget install
更新缓存中的包,情况就变得一样了……
Yan,
我推送了 MyPackage 的另一个更新 - 仍然是版本1.0.0
.
您不应该推送多个具有特定版本的包:包应该是不可变的。如果您更改了包中的某些内容,请增加内部版本号a.b.C
并推送新版本的包。
您遇到的行为是 NuGet 期望能够无限期地缓存给定包版本的副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)