nuget 无法安装、更新或删除包 "same key has already been added."

nuget fails to install, update or remove packages "same key has already been added."

我不能 install/upgrade/uninstall 我们的一个解决方案中的任何 nuget 包。据我所知,这与 PCL 无关,因为它在两台机器上是相同的。解决方案中的三个项目之一可以使用 nuget 更新,其他两个(较大的项目)失败并显示以下堆栈跟踪。

有没有人看到或知道如何解决?我们在 packages.config 中没有重复的包名称,清除它们、文件夹和引用没有帮助,我们 运行 处于管理员模式并更新它。

虽然与这些 [1]、[2] 和 [3] 类似,但堆栈跟踪不匹配并且 none 修复工作。

[1]

[2]An item with the same key has already been added while Installing nuget package

[3]installing nuget package "same key has already been added."

Attempting to gather dependencies information for package 'jQuery.1.11.3' with respect to project 'www', targeting '.NETFramework,Version=v4.5'
    Attempting to resolve dependencies for package 'jQuery.1.11.3' with DependencyBehavior 'Lowest'
    Resolving actions to install package 'jQuery.1.11.3'
    Resolved actions to install package 'jQuery.1.11.3'
    Removed package 'jQuery.1.6.4' from 'packages.config'
    Executing script file 'xxx\projectName\packages\jQuery.1.6.4\Tools\uninstall.ps1'...
    Successfully uninstalled 'jQuery.1.6.4' from www
    Adding package 'jQuery.1.11.3' to folder 'xxx\projectName\packages'
    Added package 'jQuery.1.11.3' to folder 'xxx\projectName\packages'
    Added package 'jQuery.1.11.3' to 'packages.config'
    Executing script file 'xxx\projectName\packages\jQuery.1.11.3\tools\install.ps1'...
    True


    IsDirty              : False
    FileCount            : 1
    Name                 : jquery-1.11.3.intellisense.js
    Collection           : System.__ComObject
    Properties           : System.__ComObject
    DTE                  : System.__ComObject
    Kind                 : {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}
    ProjectItems         : System.__ComObject
    Object               : System.__ComObject
    ExtenderNames        : {}
    ExtenderCATID        : {610D4615-D0D5-11D2-8599-006097C68E81}
    Saved                : True
    ConfigurationManager : 
    FileCodeModel        : 
    Document             : 
    SubProject           : 
    ContainingProject    : System.__ComObject



    Successfully installed 'jQuery 1.11.3' to www
    Install failed. Rolling back...
    Removed package 'jQuery 1.11.3' from 'packages.config'
    Executing script file 'xxx\projectName\packages\jQuery.1.11.3\Tools\uninstall.ps1'...
    True
    Package 'jQuery.1.6.4' already exists in folder 'xxx\projectName\packages'
    Added package 'jQuery.1.6.4' to 'packages.config'
    Executing script file 'xxx\projectName\packages\jQuery.1.6.4\Tools\install.ps1'...
    Removing package 'jQuery 1.11.3' from folder 'xxx\projectName\packages'
    Removed package 'jQuery 1.11.3' from folder 'xxx\projectName\packages'
    System.ArgumentException: An item with the same key has already been added.
       at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
       at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
       at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
       at NuGet.PackageManagement.VisualStudio.BindingRedirectResolver.GetBindingRedirects(IEnumerable`1 assemblies)
       at NuGet.PackageManagement.VisualStudio.BindingRedirectResolver.GetBindingRedirects(IEnumerable`1 assemblyPaths, AppDomain domain)
       at NuGet.PackageManagement.VisualStudio.RuntimeHelpers.<AddBindingRedirectsAsync>d__3.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at NuGet.PackageManagement.VisualStudio.RuntimeHelpers.<AddBindingRedirectsAsync>d__2.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at NuGet.PackageManagement.VisualStudio.RuntimeHelpers.<AddBindingRedirectsAsync>d__0.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at NuGet.PackageManagement.VisualStudio.VSMSBuildNuGetProjectSystem.<<AddBindingRedirects>b__59_0>d.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at Microsoft.VisualStudio.Threading.JoinableTask.CompleteOnCurrentThread()
       at NuGet.PackageManagement.VisualStudio.VSMSBuildNuGetProjectSystem.AddBindingRedirects()
       at NuGet.ProjectManagement.MSBuildNuGetProject.PostProcessAsync(INuGetProjectContext nuGetProjectContext, CancellationToken token)
       at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__42.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
       at NuGet.PackageManagement.NuGetPackageManager.<ExecuteNuGetProjectActionsAsync>d__42.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at NuGet.PackageManagement.UI.UIActionEngine.<ExecuteActionsAsync>d__5.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at NuGet.PackageManagement.UI.UIActionEngine.<PerformActionAsync>d__3.MoveNext()
    ========== Finished ==========

为了帮助其他遇到此问题的人,我发现这是因为我们的 web.config 中有没有 bindingRedirect 的 dependentAssembly(当使用 uCommerce 重定向他们的 dll 引用时会发生这种情况),例如

<dependentAssembly>
    <assemblyIdentity name="Infralution.Licensing" publicKeyToken="3e7e8e3744a5c13f" />
    <codeBase version="4.7.1.0" href="bin\ucommerce\Infralution.Licensing.dll" />
</dependentAssembly>

我已经检查了 nuget 更改日志并且有一个 similar thing reported here 所以将等待最新版本并查看是否可以解决它。

它似乎也与我将报告的别名引用有关