Установка пакета nuget "тот же ключ уже был добавлен".

Я пытаюсь установить Microsoft.Bcl.Build 1.0.14

Nuget возвращается

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.

Это также происходит с json.net и другими пакетами.

Я могу добавить Нэнси и верхнюю полку, но не json.net и bcl.

Я пробовал это в VS2012 и 2013. Я также попытался удалить nuget и переустановить. Я также попытался добавить nuget в пустую библиотеку классов и пустое консольное приложение. Одна и та же ошибка всегда возвращается.

Это также происходит с json.net и другими пакетами.

Я также пытался без файла пакета

Любые идеи наиболее ценятся.

Вот команда и трассировка стека

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.<GetEnumerator>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.<AddPackageReference>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.<InstallPackage>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>

10 ответов

Решение

Ваша трассировка стека рассказывает сказку, это NuGet.NetPortableProfileTable.BuildPortableProfileCollection() что не получается. В двух словах, он выполняет итерацию набора профилей справочной сборки PCL и встречается с одним и тем же профилем более одного раза. Это очень сильный намек на то, что содержание вашего c:\program files (x86)\reference assemblies\microsoft\framework\.netportable каталог поврежден.

Существует множество возможных способов устранения ущерба:

  • Если у вас есть активные воспоминания о работе с этим каталогом, например о копировании файлов, отмените то, что вы сделали.
  • Самый безопасный способ сделать это - удалить все версии Visual Studio>= VS2010. Затем почистите каталог вручную, удалив все оставшиеся файлы. Затем переустановите VS снова.
  • Не очень безопасный, но более быстрый способ - переименовать каталог c:\program files (x86)\reference Сборки и установить пакет многоцелевого назначения. Я не могу обещать успех.
  • Вы можете попытаться найти дубликат самостоятельно и удалить его. Структура каталогов выглядит следующим образом:

 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

Проверьте свои packages.config Внутри проверьте пакеты, которые вы пытаетесь установить. Может быть, некоторые ссылки уже есть, и это позволит избежать установки новых.

Если вы найдете там ссылки, удалите ссылку из packages.config и попробуйте снова установить пакет.

Иногда мне случалось так, что в файле packages.config есть какая-то старая ссылка, которая все еще остается там даже после удаления пакета из диспетчера пакетов Nuget.

Если нет, вы можете удалить весь пакет packages.config, а затем, если у вас есть возможность разрешить Nuget загружать пакеты, при создании решения пакеты будут загружены снова.

надеюсь, это поможет

Существует еще один путь, который вызывает эту ошибку. Вот как это воспроизвести:

(1) Создайте пакет nuget из проекта VS (проект 1).
(2) В проекте 2, который ссылается на проект 1, установите пакет nuget проекта 1.
(3) установка завершится с ошибкой "тот же ключ".

Решение состоит в том, чтобы просто удалить ссылку на проект 1 перед установкой пакета nuget.

Похоже, NuGet находит дубликат профиля Portable Class Library (PCL) на вашем компьютере. Жаль, что ключ не зарегистрирован в стеке исключений, что облегчит задачу.

Вы можете попробовать программу PclPal от Jon Skeet, которая может перечислить профили PCL и посмотреть, есть ли что-нибудь дублированное.

У меня есть другая программа MonoPcl, которая делает подобное. Это относится к Mono, но работает на Windows. Он использует исходный код NuGet, поэтому у него будет та же проблема, что и в Visual Studio. Однако вы должны быть в состоянии изменить код, чтобы перехватить исключение, или добавить дополнительную запись в журнал, чтобы увидеть, какой дублирующий профиль PCL вызывает проблему.

Зайди в свой packages каталог и удалите все версии пакета, которые вам больше не нужны.

Затем попробуйте установить правильную версию. Я думаю, что он просматривает все папки в этом каталоге и пытается добавить их в какой-то словарь / хэш-набор и находит две.

Просто обновите менеджер пакетов Nuget в инструментах - расширение и обновления - обновления - визуальная галерея студии - обновление менеджера пакетов Nuget

У меня была точно такая же проблема, но установка последнего обновления для диспетчера пакетов NuGet решила эту проблему.

У меня была такая же проблема при установке Autofac и Autofac MVC 5 Integration. Я решил эту проблему с помощью управления пакетами Nuget в решении, снял флажки с обоих пакетов (Uninstall), перезапустил Visual Studio и успешно переустановил пакет.

В моем случае я запустил dotnet restore из консоли диспетчера пакетов, чтобы получить дублированный ключ

PM> dotnet restore
  Determining projects to restore...
C:\Program Files\dotnet\sdk\3.1.300\NuGet.targets(128,5): error : An item with the same key has already been added. Key: (XXXX.XXX.XX, 1.0.0.0-preview1) [C:\code\MySolution.sln]

Я столкнулся с той же проблемой при создании проекта в C#.

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.IO.Packaging.ZipPackage.ContentTypeHelper.ProcessDefaultTagAttributes(XmlTextReader reader)
     at System.IO.Packaging.ZipPackage.ContentTypeHelper.ParseContentTypesFile(ZipFileInfoCollection zipFiles)
     at System.IO.Packaging.ZipPackage.ContentTypeHelper..ctor(ZipArchive zipArchive, IgnoredItemHelper ignoredItemHelper)
     at System.IO.Packaging.ZipPackage..ctor(Stream s, FileMode mode, FileAccess access, Boolean streaming)
     at System.IO.Packaging.Package.Open(Stream stream, FileMode packageMode, FileAccess packageAccess, Boolean streaming)
     at System.IO.Packaging.Package.Open(Stream stream)
     at NuGet.PackageHelper.GetManifestStream(Stream packageStream)
     at NuGet.OptimizedZipPackage.EnsureManifest()
     at NuGet.OptimizedZipPackage..ctor(String fullPackagePath)
     at NuGet.CommandLine.PackCommand.PrintVerbose(String outputPath)
     at NuGet.CommandLine.PackCommand.BuildPackage(PackageBuilder builder, String outputPath)
     at NuGet.CommandLine.PackCommand.BuildFromNuspec(String path)
     at NuGet.CommandLine.PackCommand.BuildPackage(String path)
     at NuGet.CommandLine.PackCommand.ExecuteCommand()
     at NuGet.CommandLine.Command.ExecuteCommandAsync()
     at NuGet.CommandLine.Command.Execute()
     at NuGet.CommandLine.Program.MainCore(String workingDirectory, String[] args)

Обнаружено, что несколько файлов Nuget .spec присутствуют в папке bin\Debug.

Это часто происходит в пространстве.Net Core и.Net Standard Portable Class Library. Хотя я и не проследил истинный корень проблемы, похоже, что это происходит чаще всего, когда я напрямую изменяю раздел зависимостей project.json с пакетами, которые имеют много других внешних зависимостей (с которыми связаны термины).

Если вы можете определить ответственную библиотеку, удалить все зависимости и использовать соответствующий инструмент управления пакетами nuget, чтобы добавить пакеты. Нередко приходится полностью удалять и заново создавать CLI!

У меня была похожая проблема. Это было исправлено, когда я удалил дубликаты элементов PackageReference с указанным пакетом в файле.csproj проекта с помощью блокнота.

Другие вопросы по тегам