Nuget Update-Package无法识别已安装的软件包 --> 更新失败

41

我已经在VS项目中安装了一个NuGet包(该包是我们在该项目中开发的)。当我在nuget项目上运行Update-Package时,我收到以下消息:

Update-Package : 'Project name' was not installed in any project. Update failed.
At line:1 char:15
+ Update-Package <<<<  Project name
    + CategoryInfo          : NotSpecified: (:) [Update-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.UpdatePackageCommand
我已经检查了 package.config 文件,确保 NuGet 包已定义,而且是的。有什么线索吗?

你是否在同一文件夹中有多个解决方案共享一个packages文件夹? 你是否将packages提交到源代码控制? - davidfowl
不行,我们不会在解决方案之间共享packages文件夹,也不会将相关的包提交到源代码控制中。然而,这已经不再是问题了。我刚刚删除了所有旧的与该包有关的文件夹,它又开始正常工作了。 - Tomas Jansson
那听起来就是问题所在了。顺便问一下,那是怎么发生的? - davidfowl
但是软件包已经安装了,但我遇到了一些版本不匹配的问题。这可能是一个奇怪的情况需要处理。这可能更多是用户错误,因为我们以前没有这样的设置,需要适应它。 - Tomas Jansson
从NuGet的角度来看,任何在解决方案级别的东西都被视为“已安装”。 - davidfowl
显示剩余3条评论
6个回答

49
我正在与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 引用单个包。


6
简而言之:确保packages文件夹中没有未使用的软件包版本。移除它们可以解决问题。 - jgauffin

5

我最近遇到了一个非常相似的问题 - 最终发现是由于缺少packages/repositories.config文件(因为我们不提交packages文件夹),我在VS中做了一些操作(可能是向项目添加新package),导致VS重新生成repositories.config文件,其中列出了所有项目的所有packages。之后,更新就正常工作了。


类似于你的情况 - 我已经下载了4次vsix文件,名称被追加为(1),(2)和(3),一旦我删除并只留下一个名为NuGet.Tools.vsix的文件,它就可以正常工作了。(我相信,当你尝试更新Nugget失败并出现错误时,你将无法再从Nugget安装它。至少这是我的经验。) - ramnz
一样的。感谢源代码控制。 - Casey
我删除了\packages文件夹的内容并运行了构建。然后命令正常工作了。 - Zymotik

3
我遇到了同样的问题。我们没有检查packages文件夹(nuget构建任务会下载所有包)。
我解决这个问题的唯一方法是删除packages文件夹,然后重新构建项目。

2

以下是我如何成功地获取最新版本的包管理器:

  1. 以管理员身份启动VS2010(右键选择“以管理员身份运行”)
  2. 工具 > 插件管理 > 卸载NuGet
  3. 重新启动Visual Studio
  4. 安装NuGet

完成!

希望这能帮到您。


0

另一种可能发生的情况:

  1. 没有还原包(例如使用 ReSharper 2016.2 Build)
  2. 试图更新时,有关的软件包版本不存在于 /packages/ 中

要修复,请以某种方式运行还原包


0

我的/packages/repositories.config文件中没有引用错误中提到的项目packages.config。我最近将packages.config添加到此项目中,但repositories.config未被检出并且只读,因此未更新以添加引用。

我手动编辑了repositories.config以添加新packages.config的路径。

为避免上述版本冲突,我还暂时删除了resposuitories.config中的所有其他条目。我还备份/删除了/packages/下的所有文件夹,只留下repositories.config。(在关闭VS以避免任何文件打开/锁定冲突的情况下)

然后,我重新打开解决方案并运行了Update-Package -Reinstall命令,该命令成功执行。然后,我将每个其他项目的packages.config路径添加回repositories.config中。我还比较了每个packages.config,以确保如果多个项目引用它们,则使用相同版本的软件包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接