【问题标题】:An item with the same key has already been added while Installing NuGet package安装 NuGet 包时已添加具有相同密钥的项
【发布时间】:2021-06-19 01:25:03
【问题描述】:

在我的项目中,我使用了类库。现在我将该类库作为 NuGet 包,删除类库,当尝试安装包时出现此错误:“已添加具有相同密钥的项目”?

【问题讨论】:

    标签: nuget


    【解决方案1】:

    就我而言,当我的 packages.config 文件包含不允许的重复包 ID 时,我看到了此错误。

    您可以使用下面的 PowerShell 脚本来查找解决方案中的所有重复包。它以递归方式查找所有 packages.config 文件,并针对每个 packages.config 文件检查重复的包 ID。

    $solutionFolder = "C:\MySolution"
    $nugetPackageFile = "packages.config"
    
    $files = Get-ChildItem -Path $solutionFolder -Filter $nugetPackageFile -Recurse
    
    foreach ($file in $files)
    {
        [xml]$xml = Get-Content $file.FullName
        $nodes = Select-Xml "/packages/package/@id" $xml
        $packageIds = @{}
    
        foreach ($node in $nodes) {
            $packageId = $node.Node.'#text'
            try
            {
                $packageIds.Add($packageId, $packageId)
            }
            Catch [System.ArgumentException]
            {
                Write-Host "Found duplicate package in " $file.FullName ". Duplicate package: $packageId"
            }
        }
    }
    

    【讨论】:

    • 我也有同样的问题,但是在运行这个脚本控制台后没有显示任何东西。所以我猜在我的情况下没有重复但仍在安装或更新 nuget 包显示错误'已添加具有相同密钥的项目'
    • 是的,packages.config 中有重复的键,需要删除。至关重要的是,不一定与您正在使用的当前 Nuget 包有关。
    • 在错误合并后发现我有一个重复的密钥,这不是一个很好的消息!
    • 解决我的问题,谢谢。此外,对于理解缓慢的人(就像我一样) - 它不是文件中已经存在的 new 包的原始文件,它可能是由任何包名称的重复入口引起的,例如 2 个不同的版本的 Newtonsoft.Json 包。
    【解决方案2】:

    我遇到了同样的错误,在我升级 NuGet 后它得到了修复。使用工具 -> 'Extensions and Updates' 对话框更新 NuGet。

    【讨论】:

    • 这个建议太棒了,VS2015 对我来说有点问题,但是在工具->扩展和更新中对包进行了一些管理后,我看到的 NuGet 安装包问题得到了解决。谢谢。
    • 即使包重复是问题,将 NuGet 更新到最新版本也可以让 NuGet 优雅地处理重复。
    • 在我的 ccase 中,我有最新的更新 (2016-09),但重复的条目是导致问题的原因
    【解决方案3】:

    在从其他开发人员处获取代码时,我曾多次遇到此问题。其他用户提到的问题是我遇到的一些问题。所以这里列出了我过去为解决这个问题所做的事情,以及我刚刚遇到的一个新问题:

    • 重启 Visual Studio,NuGet 有时会因为某些原因引用错误的文件(很常见的情况和解决方法)
    • 工具 > 扩展和更新中更新 NuGet 管理器...(如 @ravinsp 所述)
    • 清理并重建您的解决方案。旧的 dll 可能会把事情搞砸(正如 @Jules 所提到的)
    • 检查 packages.config 中 DIFFERENT 版本的重复引用 - 即使您尝试安装完全不同的包,此错误也可能是由另一个包问题引起的。我正在尝试安装 OctoPack,并收到此错误,但它是由 System.Spatial 引起的。我的 packages.config 中有这两行:

      <package id="System.Spatial" version="5.6.2" targetFramework="net45" />

      <package id="System.Spatial" version="5.6.4" targetFramework="net45" />

    【讨论】:

    • “检查 packages.config 中不同版本的重复引用”选项是我的解决方案。谢谢;
    【解决方案4】:

    我遇到了同样的问题。它一直告诉我“已经添加了具有相同密钥的项目”,即使它不在我的参考资料中,也不在我的 packages.configeither 中。

    最终我设法通过在 Visual Studio 中显示所有文件来修复它。在bin 文件夹中,我找到了对我试图通过Nuget 安装的.dll 的引用。删除那个之后,问题就消失了。

    也许这也可以为您解决问题。

    【讨论】:

    • 我很想对此进行一些故障排除 - 但这也为我解决了问题!
    【解决方案5】:

    我也遇到了同样的问题。我删除了包并从 Web.Config 文件中删除了以下项目,然后重新安装了包 - 问题解决了!

    section name="ajaxControlToolkit" type="AjaxControlToolkit.AjaxControlToolkitConfigSection, AjaxControlToolkit"

    【讨论】:

      【解决方案6】:

      这让我大部分时间都在忙。尝试安装软件包时出现同样的问题。最后尝试安装具有相同结果的不同软件包。事实证明,packages.config 中的任何重复(具有不同版本)都会导致此错误。删除了两个副本的旧版本,现在我可以再次安装包。

      【讨论】:

        【解决方案7】:

        多年后我的问题出现了...... VS2019 我在 .net 5 中遇到了这个错误。

        我在构建包含的项目时遇到此错误,但该项目包含的项目不在解决方案中。

        我构建的所有项目都给出了相同的错误,因此它看起来像是我正在构建的任何项目的当前 nuget 包集。一旦我删除了缺少包含的项目或将依赖项目添加到解决方案中,它就被解决了。

        【讨论】:

          猜你喜欢
          • 2014-08-17
          • 1970-01-01
          • 2011-01-27
          • 1970-01-01
          • 2021-08-02
          • 2011-03-01
          • 2017-11-17
          相关资源
          最近更新 更多