我正在与Tomas一起开发同一个项目,我已经尝试弄清楚此问题发生的时间和原因。似乎当我们在包文件夹中有一个或多个旧版本的软件包并尝试发出“update-package”命令时,就会出现这种情况。
在执行该命令之前,我们的软件包文件夹和配置如下所示:
软件包文件夹:
Common.WebApi.1.0.0.109
Common.WebApi.1.0.0.110
软件包配置:
<packages>
<package id="Common.WebApi" version="1.0.0.110" />
<package id="System.Json" version="4.0.20126.16343" />
<package id="System.Net.Http" version="2.0.20126.16343" />
</packages>
现在,当我们执行 'update-package Common.WebApi' 命令时,会出现以下错误:
Update-Package : 未将 'OPF.Common.WebApi' 安装在任何项目中。更新失败。
为了解决这个问题,我从 packages 文件夹中删除了旧的包 'Common.WebApi.1.0.0.109',然后重新运行命令就可以了。
显然的问题是:为什么我的 packages 文件夹里有一个旧版本的包呢?这是因为我们不会将自己的包提交到源代码控制中。相反,我们使用了这里描述的方法:http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
在以下情况下会发生“旧包问题”:
1. 开发人员A更新了一个包,并将 package.config 提交到源代码控制中
2. 开发人员B从源代码控制获取了最新版本的 package.config
3. 开发人员B构建项目,新版本的包被创建到他的 packages 文件夹中
4. Nuget 不会从开发人员B的 packages 文件夹中删除旧版本的包,所以开发人员B现在在他的 packages 文件夹中同时拥有旧版本和新版本的包,但只有对新版本的包的引用在 package.config 中。
对我来说,似乎Nuget并不希望 packages 文件夹中存在多个版本的包,在尝试更新具有多个版本(在packages文件夹中)的包时可能会变得混乱,即使您只从 package.config 引用单个包。