Jules Jules - 3 months ago 12
C# Question

installing nuget package "same key has already been added."

i am trying to install Microsoft.Bcl.Build 1.0.14

nuget returns


Installing 'Microsoft.Bcl.Build 1.0.14'. Successfully installed
'Microsoft.Bcl.Build 1.0.14'. Adding 'Microsoft.Bcl.Build 1.0.14' to
LeadTracker.Calendar. Uninstalling 'Microsoft.Bcl.Build 1.0.14'.
Successfully uninstalled 'Microsoft.Bcl.Build 1.0.14'. Install failed.
Rolling back... An item with the same key has already been added.


This also happens with json.net and other packages.

I can add nancy and topshelf but not json.net and bcl.

I have tried it in VS2012 and 2013. I have also tried uninstalling nuget and reinstalling. I have also tried adding the nuget to an empty class library and an empty console app. The same error is always returned.

This also happens with json.net and other packages.

I have also tried with no packages file

Any ideas most appreciated.

Here is the command and stacktrace


PM> Install-Package Microsoft.Bcl.Build Installing
'Microsoft.Bcl.Build 1.0.14'. You are downloading Microsoft.Bcl.Build
from Microsoft, the license agreement to which is available at
http://go.microsoft.com/fwlink/?LinkId=329770. Check the package for
additional dependencies, which may come with their own license
agreement(s). Your use of the package and dependencies constitutes
your acceptance of their license agreements. If you do not accept the
license agreement(s), then delete the relevant components from your
device. Successfully installed 'Microsoft.Bcl.Build 1.0.14'. Adding
'Microsoft.Bcl.Build 1.0.14' to GoogleCalendarIntegration.
Uninstalling 'Microsoft.Bcl.Build 1.0.14'. Successfully uninstalled
'Microsoft.Bcl.Build 1.0.14'. Install failed. Rolling back...
Install-Package : An item with the same key has already been added. At
line:1 char:1
+ Install-Package Microsoft.Bcl.Build
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Install-Package], ArgumentException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPac

kageCommand PM> $error[0].exception.stacktrace at
System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
at System.Collections.Generic.Dictionary
2.Insert(TKey key, TValue
value, Boolean add) at
System.Collections.ObjectModel.KeyedCollection
2.AddKey(TKey key,
TItem item) at
System.Collections.ObjectModel.KeyedCollection
2.InsertItem(Int32
index, TItem item) at
System.Collections.ObjectModel.Collection
1.Add(T item) at
NuGet.CollectionExtensions.AddRange[T](ICollection
1 collection,
IEnumerable
1 items) at
NuGet.NetPortableProfileTable.BuildPortableProfileCollection() at
NuGet.NetPortableProfileTable.get_Profiles() at
NuGet.NetPortableProfileTable.GetProfile(String profileName) at
NuGet.NetPortableProfile.Parse(String profileValue, Boolean
treatOptionalFrameworksAsSuppor tedFrameworks) at
NuGet.VersionUtility.IsPortableLibraryCompatible(FrameworkName
projectFrameworkName, Framew orkName packageTargetFrameworkName) at
NuGet.VersionUtility.IsCompatible(FrameworkName projectFrameworkName,
FrameworkName package TargetFrameworkName) at
NuGet.VersionUtility.<>c__DisplayClass8
1.<TryGetCompatibleItems>b__15(IGrouping
2
g) at System.Linq.Enumerable.WhereListIterator
1.MoveNext() at
System.Linq.Buffer
1..ctor(IEnumerable
1 source) at
System.Linq.OrderedEnumerable
1.d__0.MoveNext() at
System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 source)

at NuGet.VersionUtility.TryGetCompatibleItems[T](FrameworkName
projectFramework, IEnumerable
1 items, IEnumerable
1&
compatibleItems) at
NuGet.ProjectSystemExtensions.GetCompatibleItemsCore[T](IProjectSystem
projectSystem, IEnum erable
1 items) at
NuGet.ProjectManager.ExtractPackageFilesToProject(IPackage package)

at NuGet.ProjectManager.AddPackageReferenceToProject(IPackage package)
at NuGet.ProjectManager.Execute(PackageOperation operation) at
NuGet.ProjectManager.Execute(IPackage package,
IPackageOperationResolver resolver) at
NuGet.ProjectManager.AddPackageReference(IPackage package, Boolean
ignoreDependencies, Bool ean allowPrereleaseVersions) at
NuGet.VisualStudio.VsPackageManager.<>c__DisplayClass83.b__85()
at
NuGet.VisualStudio.VsPackageManager.RunProjectAction(IProjectManager
projectManager, Action action) at
NuGet.VisualStudio.VsPackageManager.AddPackageReference(IProjectManager
projectManager, IPa ckage package, Boolean ignoreDependencies, Boolean
allowPrereleaseVersions) at
NuGet.VisualStudio.VsPackageManager.<>c__DisplayClass3.b__7()
at NuGet.VisualStudio.VsPackageManager.RunSolutionAction(Action
action) at
NuGet.VisualStudio.VsPackageManager.InstallPackage(IProjectManager
projectManager, String p ackageId, SemanticVersion version, Boolean
ignoreDependencies, Boolean allowPrereleaseVersions, B oolean
skipAssemblyReferences, ILogger logger) at
NuGet.VisualStudio.VsPackageManager.InstallPackage(IProjectManager
projectManager, String p ackageId, SemanticVersion version, Boolean
ignoreDependencies, Boolean allowPrereleaseVersions, I Logger logger)
at
NuGet.PowerShell.Commands.InstallPackageCommand.InstallPackage(IVsPackageManager
packageMan ager) at
NuGet.PowerShell.Commands.InstallPackageCommand.ProcessRecordCore()

at NuGet.PowerShell.Commands.NuGetBaseCommand.ProcessRecord() PM>

Answer

Your stack-trace tells the tale, it is NuGet.NetPortableProfileTable.BuildPortableProfileCollection() that fails. In a nutshell, it iterates the set of PCL reference assembly profiles and encounters the same profile more than once. This is a very strong hint that the content of your c:\program files (x86)\reference assemblies\microsoft\framework\.netportable directory is corrupted.

There are many possible ways to go about fixing the damage:

  • If you have an active recollection of tinkering with this directory, like copying files, then undo what you did.
  • Safest way to go about it is to uninstall all Visual Studio versions >= VS2010. Then clean up the directory by hand, deleting any stray files that are still present. Then reinstalling VS again.
  • The not-so-safe but speedier way is to rename the c:\program files (x86)\reference assemblies directory and install the multi-targeting pack. I can't promise success.
  • You can try to find the duplicate yourself and remove it. The directory structure looks like this:

 Directory of C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.0\Profile

05/14/2014  01:01 PM    <DIR>          Profile1
05/14/2014  01:01 PM    <DIR>          Profile102
05/14/2014  01:01 PM    <DIR>          Profile104
05/14/2014  01:01 PM    <DIR>          Profile131
05/14/2014  01:01 PM    <DIR>          Profile136
05/14/2014  01:01 PM    <DIR>          Profile14
05/14/2014  01:01 PM    <DIR>          Profile143
05/14/2014  01:01 PM    <DIR>          Profile147
05/14/2014  01:01 PM    <DIR>          Profile154
05/14/2014  01:01 PM    <DIR>          Profile158
05/14/2014  01:01 PM    <DIR>          Profile18
05/14/2014  01:01 PM    <DIR>          Profile19
05/14/2014  01:01 PM    <DIR>          Profile2
05/14/2014  01:01 PM    <DIR>          Profile225
05/14/2014  01:01 PM    <DIR>          Profile23
05/14/2014  01:01 PM    <DIR>          Profile24
05/14/2014  01:01 PM    <DIR>          Profile240
05/14/2014  01:01 PM    <DIR>          Profile255
05/14/2014  01:01 PM    <DIR>          Profile3
05/14/2014  01:01 PM    <DIR>          Profile328
05/14/2014  01:01 PM    <DIR>          Profile336
05/14/2014  01:01 PM    <DIR>          Profile344
05/14/2014  01:01 PM    <DIR>          Profile36
05/14/2014  01:01 PM    <DIR>          Profile37
05/14/2014  01:01 PM    <DIR>          Profile4
05/14/2014  01:01 PM    <DIR>          Profile41
05/14/2014  01:01 PM    <DIR>          Profile42
05/14/2014  01:01 PM    <DIR>          Profile46
05/14/2014  01:01 PM    <DIR>          Profile47
05/14/2014  01:01 PM    <DIR>          Profile5
05/14/2014  01:01 PM    <DIR>          Profile6
05/14/2014  01:01 PM    <DIR>          Profile88
05/14/2014  01:01 PM    <DIR>          Profile92
05/14/2014  01:01 PM    <DIR>          Profile95
05/14/2014  01:01 PM    <DIR>          Profile96

 Directory of C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.5\Profile

05/14/2014  12:59 PM    <DIR>          .
05/14/2014  12:59 PM    <DIR>          ..
05/14/2014  01:01 PM    <DIR>          Profile111
05/14/2014  01:01 PM    <DIR>          Profile259
05/14/2014  01:01 PM    <DIR>          Profile49
05/14/2014  01:01 PM    <DIR>          Profile7
05/14/2014  01:01 PM    <DIR>          Profile78

 Directory of C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.6\Profile

05/14/2014  12:59 PM    <DIR>          .
05/14/2014  12:59 PM    <DIR>          ..
05/14/2014  01:01 PM    <DIR>          Profile151
05/14/2014  01:01 PM    <DIR>          Profile157
05/14/2014  01:01 PM    <DIR>          Profile31
05/14/2014  01:01 PM    <DIR>          Profile32
05/14/2014  01:01 PM    <DIR>          Profile44
05/14/2014  01:01 PM    <DIR>          Profile84