Nuget Can';t更新或安装程序包:已添加具有相同密钥的项 问题

Nuget Can';t更新或安装程序包:已添加具有相同密钥的项 问题,nuget,Nuget,在特定项目中,我无法更新或安装任何NuGet软件包。当我尝试使用NuGet GUI执行此操作时,它会做一些工作,然后停止,不说任何话。当我尝试使用package manager控制台执行此操作时,我得到以下输出: PM> Update-Package –reinstall EntityFramework Attempting to gather dependencies information for multiple packages with respect to project 'S

在特定项目中,我无法更新或安装任何NuGet软件包。当我尝试使用NuGet GUI执行此操作时,它会做一些工作,然后停止,不说任何话。当我尝试使用package manager控制台执行此操作时,我得到以下输出:

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
PM>更新包–重新安装EntityFramework
正在尝试收集与项目“SmartCenter”有关的多个包的依赖项信息,目标为“.NETFramework,版本=v4.5.2”
更新包:已添加具有相同密钥的项。
第1行字符:15

+更新包结果是
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>

在我的例子中,我有不同的
包.config
文件(一个在pcl中,一个在droid中,一个在ios中),包的版本不同。 在我的软件包文件夹(
Projects\MyProjName\packages
)中,我遇到以下情况:


我只删除了旧版本的副本,然后用正确的版本更新package.config文件中的数据 例如:

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

变成

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


现在,您可以重新打开项目,所有工作正常。

我尝试了所有方法,然后

  • 确保框架是最新的。(对于我正在升级的MVC包)
  • 卸载NuGet并重新安装

  • 也许值得一试。不会花太长时间。

    我不知何故在csproj文件中添加了两个不同版本的导入引用。我已经手动编辑它以删除额外的引用

    发件人:

    
    
    致:

    
    

    一切都很好。

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

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

    如果有人使用net core并出现此错误,请使用命令提示符获取详细的错误消息

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

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

    例:

    在我的例子中,我在一个定制的NuGet包中安装了一个主库版本,但是忘记了更新辅助程序集

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

    My.MainPackage.dll v 1.6此错误消息非常模糊,可能有任何含义:(

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

    • 从解决方案中删除所有项目
    • 逐一读取,直到出现错误
    • 检查上次添加的项目的.csproj
      • 从.csproj中删除大的部分
      • 如果错误仍然存在,请重试
      • 重复此操作,直到可以缩小导致问题的部分(阅读以前删除的部分通常是个好主意)
      • 继续,直到你发现了类似于复制品的东西
    对我来说,我的.csproj中有以下内容:

      <RuntimeIdentifier>win</RuntimeIdentifier>
      /* Some more stuff */
      <RuntimeIdentifiers>win;linux</RuntimeIdentifiers>
    
    win
    /*再来点东西*/
    赢;linux
    

    删除
    win
    解决了问题。

    错误是一个重复的proj/nuget包。那么如何在不删除/重新安装任何内容的情况下找到重复的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
    没有直接引用它,而是通过另一个包引用间接引用它。现在看起来很明显,但我花了很长时间才读到这一行。希望这对某人有所帮助。

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

    这解决了我的问题。我从另一个开发人员那里获得了一个项目中NuGet包的两个不同版本。检查了实际使用的版本,然后删除了该版本未使用记事本。在VS中重新加载,一切正常。谢谢!非常感谢,它也解决了我的问题。非常遗憾地看到Microsoft在报告问题时做得比这更好。如果它发现有重复项,即密钥已经存在。那么我不知道为什么他们很难告诉我们是哪个关键!他们的未来非常悲惨。开源万岁。我的只有旧记录,不允许更新。所以按照你所做的,我只是在DL之后更改了版本。我不知道为什么会发生这种情况,因为我没有两个。谢谢你的回答,它帮助了我!这帮助我找到了问题。两个不同版本的系统。t引用的内存两个不同的软件包。谢谢你,我差点忘了你可以手动进行dotnet还原,并通过这种方式获得更多详细信息。
    My.MainPackage.dll v 1.6 <-- Bumped the version here
    My.PackageDependency v 1.5 <-- Forgotten to bump this version
    
      <RuntimeIdentifier>win</RuntimeIdentifier>
      /* Some more stuff */
      <RuntimeIdentifiers>win;linux</RuntimeIdentifiers>
    
    C:\...\NuGet.targets(128,5): 
     error : An item with the same key has already been added.
     Key: (MyLib, 1.0.2) [C:\SomeApp.csproj]