【问题标题】:nuget fails to install, update or remove packages "same key has already been added."nuget 无法安装、更新或删除软件包“已添加相同的密钥”。
【发布时间】:2015-10-13 18:44:11
【问题描述】:

我无法在我们的一种解决方案上安装/升级/卸载任何 nuget 包。据我所知,这与 PCL 无关,因为它在两台机器上是相同的。解决方案中的三个项目之一可以使用 nuget 进行更新,另外两个(较大的项目)失败并出现下面的堆栈跟踪。

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

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

[1]Visual Studio 2015, Nuget and “same key has already been added.”

[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 ==========

【问题讨论】:

  • 进一步挖掘,我发现这也会导致问题(我怀疑这是运行的底层命令)Get-Project –All | Add-BindingRedirect

标签: nuget visual-studio-2015


【解决方案1】:

为了帮助其他遇到此问题的人,我发现这是因为我们的 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,所以将等待最新版本,看看是否可以解决问题。

我将报告的别名引用似乎也有问题

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多