NuGet软件包管理器控制台:“update-package -project ...”不能更新所有已安装的软件包。

4

我在ProjectX中有一个如下的packages配置:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Castle.Core" version="2.5.2" />
  <package id="Castle.Windsor" version="2.5.3" />
  <package id="CommonServiceLocator" version="1.0" />
  <package id="MyCompany.Enum" version="1.1.0.11" />
  <package id="MyCompany.Common" version="1.1.0.9" />
  <package id="MyCompany.Castle.Installers" version="1.1.0.13" />
</packages>

当我在程序包管理控制台中输入以下命令时:
update-package -project ProjectX

我看到以下输出:
No updates available for 'MyCompany.Castle.Installers'.
No updates available for 'CommonServiceLocator'.
No updates available for 'Castle.Windsor'.
No updates available for 'Castle.Core'.

我知道事实上有一个更新的MyCompany.Enum,为什么它没有在输出中列出?我知道NuGet在安装时会尝试使用最低适用版本,但在这种情况下,我希望update-package将其更新到最新版本。

我尝试使用以下命令强制更新MyCompany.Enum

update-package -project MyCompany.Services.MyService MyCompany.Enum

这次出现了错误信息:

Update-Package : Unable to find package 'MyCompany.Enum' in 'MyCompany.Services.MyService'.
At line:1 char:15
+ update-package <<<<  -project MyCompany.Services.ProjectX MyCompany.enum
    + CategoryInfo          : NotSpecified: (:) [Update-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.UpdatePackageCommand

这很奇怪,因为MyCompany.Enum既在packages.config中列出,又被Solution Explorer中的ProjectX引用。
这是什么原因呢?如果这是nuget的bug,那没关系,但我认为我可能对它的工作方式有所误解。我听说过类似的repositories.config问题,但没有能够将这些问题与我在这里看到的联系起来。
提前致谢。
更新: 如果我手动安装MyCompany.Enum包到ProjectX中,使用以下命令:
install-package -project ProjectX MyCompany.Enum

然后我得到了这个输出:

'MyCompany.Enum 1.5.0.1' already installed.
Successfully added 'MyCompany.Enum 1.5.0.1' to MyCompany.Services.ProjectX.

但是很遗憾,现在我的packages.config文件中有两个MyCompany.Enum实例:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Castle.Core" version="2.5.2" />
  <package id="Castle.Windsor" version="2.5.3" />
  <package id="CommonServiceLocator" version="1.0" />
  <package id="MyCompany.Enum" version="1.1.0.11" />
  <package id="MyCompany.Common" version="1.1.0.9" />
  <package id="MyCompany.Castle.Installers" version="1.1.0.13" />
  <package id="MyCompany.Enum" version="1.5.0.1" />
</packages>

看起来你处于糟糕的状态?在1.5版本中,我们正在进行一些工作,以规范安装时的packages.config,这样您就不会出现重复项了。将packages.config视为可能安装在解决方案级别(也称为packages文件夹)的子集。如果某些内容在那里列出,但不在解决方案文件夹中,则仍然没有被安装。 - davidfowl
1个回答

2

你的 packages\repositories.config 文件是否存在且正确?

由于大多数人不检查 packages 文件夹,所以该文件会丢失。一些 NuGet 命令首先查找该文件,如果未找到则会失败。某些操作(例如在项目中安装软件包)将导致它重新生成。

我曾经遇到过更新无法正常工作的类似问题,但是一旦我添加了一个新项目,更新就开始正常工作了。


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