Visual studio 2015 VS2015 Nuget僵尸缓存

Visual studio 2015 VS2015 Nuget僵尸缓存,visual-studio-2015,nuget,Visual Studio 2015,Nuget,我遇到了一个奇怪的问题,VS2015正在缓存一个有依赖性问题的(私有)nuget包的过时副本,但该包已经用相同的版本号重新构建,减去了依赖性问题。不管我做什么,VS2015似乎在某处从以太中变出这个旧的破包。我已清除appdata\local\Nuget\cache(v2和v3缓存)。我已经删除了packages文件夹。我已经使用软件包管理器重新安装了软件包。似乎什么都不管用。我知道这是一个VS2015问题,因为当我运行VS2012并从该环境安装软件包时,正确的软件包安装没有依赖性问题 有人知道

我遇到了一个奇怪的问题,VS2015正在缓存一个有依赖性问题的(私有)nuget包的过时副本,但该包已经用相同的版本号重新构建,减去了依赖性问题。不管我做什么,VS2015似乎在某处从以太中变出这个旧的破包。我已清除appdata\local\Nuget\cache(v2和v3缓存)。我已经删除了packages文件夹。我已经使用软件包管理器重新安装了软件包。似乎什么都不管用。我知道这是一个VS2015问题,因为当我运行VS2012并从该环境安装软件包时,正确的软件包安装没有依赖性问题

有人知道VS2015从哪里得到这个过时的软件包吗?

好的,显然:

C:\Users\username\AppData\Local\NuGet\v3-cache
实际上不是v3缓存。它就是这样命名的,所以你会感到困惑

v3缓存位于此处:

 C:\Users\username\.nuget\packages

这就是我的僵尸软件包的来源,而“更新软件包-重新安装”命令(该命令的文档没有提到使用缓存,如果缓存可用)并不能解决此问题。

复制此错误的步骤

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

2) 在项目中安装包-A(包-B应随附)

3) 删除包-B(从nuget源代码)并尝试重新安装包-A。如果nuget找不到依赖项,则会出现错误:包-B

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


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

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


顺便说一下,不建议推送多个具有相同版本的软件包。有关详细信息,请参阅此类似问题:。

能否在VS2015中提供有关此依赖性问题的详细步骤?它可以帮助我们重现这个问题并理解它。我将添加一个带有重现步骤的回复。此外,我不确定这是否是针对VS2015的。这正是我目前正在使用的。同样的事情也可能发生在VS2013中,但我懒得检查。在删除包-B后,是否重新打包并重新安装包-A?我删除了包-B并重新打包包-A,但在我的项目中重新安装包时,我没有收到任何错误。@Bitfiddler您能增加包A的版本,然后重试吗?随着版本号的增加,它应该可以正常工作。@wendy,是的,我重新打包并试图重新安装。但是“重新安装”命令总是从缓存中取出软件包(直到我手动清除缓存),所以当Nuget执行依赖项解析并试图从服务器获取packageB的元数据时,它丢失了,并给出了一个错误。@Eddie-增加版本号可能会起作用,除了我不喜欢在没有内部代码更改的情况下增加版本号(只有一个损坏的包引用)。我以为重新安装会从源代码处获取所有内容的新副本,而不是获取缓存包并将其重新添加到项目中。@Eddie-我想,重新安装的作用更像是“修复”,而不是重新安装。对我来说,如果我想重新安装一个应用程序,我想我会删除与该应用程序相关的所有内容,然后获取一份新的安装程序副本(无论是从媒体cd/dvd/usb还是从供应商网站下载),然后重新安装。nuget重新安装所做的更像是启动添加/删除程序并运行“修复”以潜在地修复注册表引用等,但实际上您并没有从源代码处获得新的安装。