2016-09-21 167 views
1

我遇到了一个奇怪的问题,VS2015正在缓存具有依赖性问题的(私人)nuget包的陈旧副本,但该包已被重建为相同版本号减去依赖关系问题。无论我做什么,VS2015似乎都会将这个破旧的软件包变成以太网的某个地方。我清除了appdata \ local \ Nuget \ cache(包括v2和v3缓存)。我已经删除了包文件夹。我已经使用包管理器来重新安装包。似乎没有任何工作。我知道这是一个VS2015问题,因为当我运行VS2012并从该环境安装软件包时,安装了正确的软件包而没有依赖性问题。VS2015 Nuget僵尸缓存

有谁知道VS2015从哪里得到这个陈旧的包?

回答

0

Nuget将程序包缓存在%UserProfile%/。nuget/packages文件夹中。当你安装nuget软件包时,它将首先检查缓存,看看该软件包是否已经存在。如果是,它将直接从缓存中安装软件包,而不是从nuget源下载。由于您未更新软件包A的版本,因此它会将旧软件包安装在缓存文件夹中。所以你需要清理缓存以使其工作。

顺便说一下,不推荐使用相同版本推送多个包。有关详细信息,请参阅此类似问题:How does NuGet decide whether to use local package cache or not?

0

好了,所以显然:

C:\Users\username\AppData\Local\NuGet\v3-cache 

实际上不是V3缓存。它就是这样命名的,所以你会感到困惑。

V3缓存位于:

C:\Users\username\.nuget\packages 

而这正是我的僵尸包来自何处,并命令“更新包-reinstall”,谁的文件没有提及使用缓存,如果它是的可用,不能解决这个问题。

+0

你能否在VS2015中提供关于这个依赖关系问题的详细步骤?它可以帮助我们重现这个问题并理解它。 –

+0

我将添加一个回复步骤来重现。 – Bitfiddler

+0

此外,我不确定这是否特定于VS2015。这正是我目前使用的。在VS2013中可能会发生同样的事情,但我不能打扰检查。 – Bitfiddler

0

重现此错误的步骤。

1)创建一个nuget包-A,其中包含引用包B的依赖项,另一个包存在。

2)在项目中安装package-A(package-B应该附带)。

3)删除软件包-B(来自nuget源)并尝试重新安装软件包A.你应该在nuget找不到依赖的地方出现错误:package-B。

4)修改package-A以引用仍然可用的package-B的旧版本。

5)尝试在项目中重新安装package-A(现在已经部署了具有相同版本号的固定nuget包),直到清除包缓存为止,您将继续出现错误。

+0

删除软件包B后,您是否重新打包并重新安装软件包A?我删除了软件包-B并重新打包了软件包A,但在我的项目中重新安装软件包时没有出现任何错误。 –

+0

@Bitfiddler你可以增加套餐A的版本,然后再试一次吗?它应该与增加的版本号正确工作。 –

+0

@ wendy,是的我重新打包并试图重新安装。但重新安装命令总是从缓存中取出包(直到我手动清除缓存),所以当Nuget执行依赖关系解析并试图从packageB的服务器获取元数据时,它丢失并发生错误。 – Bitfiddler