无法更新或安装软件包:已添加具有相同密钥的项目

时间:2016-01-17 22:54:37

标签: nuget

问题

在特定项目中,我无法更新或安装任何NuGet包。当我尝试使用NuGet GUI这样做时,它会做一些工作然后停止而不说什么。当我尝试使用包管理器控制台时,我得到了这个输出:

PM> Update-Package –reinstall EntityFramework
Attempting to gather dependencies information for multiple packages with respect to project 'SmartCentre', targeting '.NETFramework,Version=v4.5.2'
Update-Package : An item with the same key has already been added.
At line:1 char:15
+ Update-Package <<<<  –reinstall EntityFramework
    + CategoryInfo          : NotSpecified: (:) [Update-Package], Exception
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.UpdatePackageCommand

环境

  • Visual Studio Professional 2015 Update 1
  • NuGet 3.3.0.167

我尝试了什么

  • 正在删除packages文件夹
  • 重新启动Visual Studio
  • 重新启动计算机

11 个答案:

答案 0 :(得分:16)

事实证明,packages.config文件有两个不同版本的副本:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <!-- ... -->
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net40" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.2" targetFramework="net40" />
  <!-- ... -->
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
  <package id="Newtonsoft.Json" version="5.0.8" targetFramework="net40" />
  <!-- ... -->
</packages>

删除重复项后,问题就不复存在了:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <!-- ... -->
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.2" targetFramework="net40" />
  <!-- ... -->
  <package id="Newtonsoft.Json" version="5.0.8" targetFramework="net40" />
  <!-- ... -->
</packages>

答案 1 :(得分:1)

在我的情况下,我有不同的packages.config文件(一个在pcl中,一个在机器人中,一个在ios中),具有不同的包版本。 在我的包文件夹(Projects\MyProjName\packages)中,我有以下情况:

Some packages compare in different versions
我只删除了旧版本的重复项,之后我使用正确的版本更新了package.config文件中的数据 例如:

 <package id="Newtonsoft.Json" version="8.0.3" targetFramework="net40" />

成了

<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net40" />

现在你可以重新打开项目,一切正常。

答案 2 :(得分:1)

在我的情况下,我们在回购文件中签入了一个错误的nuget.config文件。它的设置指向两个都包含相同软件包的不同NuGet存储库。我们正在使用NuGet.exe 3.5。删除nuget.config文件可以为我们解决此问题。

答案 3 :(得分:0)

我尝试了一切然后;

  1. 确保框架是最新的。 (对于我正在升级的MVC包)
  2. 卸载NuGet并重新安装。
  3. 值得一试。不用太长时间。

答案 4 :(得分:0)

我以某种方式将两个不同版本的导入引用添加到我的csproj文件中。我已经手动对其进行了编辑,以删除多余的参考。

发件人:

<Import Project="..\packages\Xamarin.Forms.2.5.0.121934\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.2.5.0.121934\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Import Project="..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets')" />

收件人:

<Import Project="..\packages\Xamarin.Forms.3.1.0.583944\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets')" />
<Import Project="..\packages\Xamarin.Forms.v\build\netstandard2.0\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.1.0.583944\build\netstandard2.0\Xamarin.Forms.targets')" />

一切都很好。

答案 5 :(得分:0)

我这边遇到同样的问题。卸载软件包,然后再安装软件包解决了该问题。

答案 6 :(得分:0)

如果有人正在使用网络核心并且收到此错误,请使用命令提示符获取详细的错误消息。

请运行dotnet restore来查找有冲突的版本。

以上命令需要从pjt文件所在的文件夹中运行。

例如:

 Unable to satisfy conflicting requests for '************': (>= 1.0.1)

 (via package/************ 1.0.22), ************ (>= 1.0.1)

 (via project/************ 1.0.0) Framework: 

 (.NETStandard,Version=v2.0)C:\Users\************\Source\************API.csproj]

答案 7 :(得分:0)

在我的情况下,我将packaged multiple assemblies放在了自定义的NuGet程序包中并修改了主库的版本,但是却忘记了更新辅助程序集。

My.MainPackage.dll v 1.6 <-- Bumped the version here
My.PackageDependency v 1.5 <-- Forgotten to bump this version

在推送这个错误的程序包之后,每当我尝试Update-Package使用先前版本的任何项目时,我都会收到错误消息

  

具有相同键的项已添加

由于此程序包的先前和下一发行版均包含旧版本的辅助程序集。

解决方案只是重建损坏的程序包,再次增加两个程序集版本。

FWIW,我尝试使用此不良软件包进行升级的所有下游项目都处于半熟状态,需要手动编辑以恢复到一致的版本。

答案 8 :(得分:0)

此错误消息确实非常模糊,可能意味着任何意思:(

我可以为大型项目推荐这种方法:

  • 从解决方案中删除所有项目
  • 一一读取它们直到出现错误
  • 检查最后添加的项目的.csproj
    • 从.csproj删除大部分内容
    • 尝试检查错误是否仍然存在
    • 重复操作,直到您可以缩小导致问题的部分的范围为止(阅读以前删除的部分通常是个好主意)
    • 继续,直到找到看起来像重复的东西

对我来说,.csproj中的内容如下:

  <RuntimeIdentifier>win</RuntimeIdentifier>
  /* Some more stuff */
  <RuntimeIdentifiers>win;linux</RuntimeIdentifiers>

删除<RuntimeIdentifier>win</RuntimeIdentifier>解决了这个问题。

答案 9 :(得分:0)

错误是重复的proj / nuget软件包。那么,如何在不删除/重新安装任何内容的情况下找到重复项?

我跑了dotnet restore并收到大量错误消息。最后,得到了这个:

C:\...\NuGet.targets(128,5): 
 error : An item with the same key has already been added.
 Key: (MyLib, 1.0.2) [C:\SomeApp.csproj]

MyLib是重复项。跟踪所有参考。 SomeApp没有直接引用它,而是通过另一个包引用间接引用了它。现在似乎很明显,但是我花了很长时间才读懂这行。希望这对某人有帮助。

答案 10 :(得分:0)

就我而言,即使 dotnet restore 也没有透露任何信息。 然后我使用 VS 命令提示符dotnet build .sln,它揭示了实际错误以及罪魁祸首库和冲突版本。