Менеджер пакетов NuGet: "AutoMapper" уже имеет зависимость, определенную для "Microsoft.CSharp",

Я пытаюсь добавить AutoMapper в качестве зависимости от проекта с использованием NuGet на Visual Studio Premium 2012, но он терпит неудачу.

В нем говорится:

Операция завершилась неудачно
"AutoMapper" уже имеет зависимость, определенную для 'Microsoft.CSharp'.

Я могу добавить другие зависимости.

Я использую последнюю версию диспетчера пакетов для VS 2012:

Менеджер пакетов NuGet 2.8.60318.667

Любые идеи, что я должен проверить?

Ответ 1

Кажется, проблема с текущей версией automapper:

AutoMapper 5.0.0 Вторник, 28 июня 2016 г.

Я попытался с предыдущей версией, и он работает:

PM> Install-Package AutoMapper -Verbose
Install-Package : 'AutoMapper' already has a dependency defined for 'Microsoft.CSharp'.
At line:1 char:16
+ Install-Package <<<<  AutoMapper -Verbose
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

PM> Install-Package AutoMapper -Version 4.2.1
Installing 'AutoMapper 4.2.1'.
Successfully installed 'AutoMapper 4.2.1'.

Итак, если вы не можете обновить диспетчер пакетов NuGet, ответ будет следующим:

PM> Install-Package AutoMapper -Version 4.2.1

Ответ 2

Проблема в том, что ваш диспетчер пакетов NuGet слишком стар. Вам нужно NuGet 2.12, так как это поддерживает новые среды .NETStandard, которые использует пакет AutoMapper 5.0.1 NuGet.

В AutoMapper есть групповая зависимость, которая определяет целевую структуру .NETStandard. Поскольку ваша версия NuGet Package Manager слишком стар, она не распознает эту целевую структуру и преобразует ее в неизвестную целевую структуру, и вы получаете дубликаты фреймворков, так как там .NETStandard используется несколько раз в этом пакете NuGet. Это вызывает ошибку:

'AutoMapper' already has a dependency defined for 'Microsoft.CSharp'

К сожалению, NuGet 2.12 недоступен для Visual Studio 2012, но доступен для Visual Studio 2013.

Итак, либо вам нужно обновить Visual Studio 2013 или выше, либо вам придется использовать более старый пакет AutoMapper NuGet, который не поддерживает .NETStandard.

Ответ 3

Мне пришлось обновить NuGet.exe, который был включен в решение, чтобы иметь возможность создавать пакеты NuGet, запустив:

nuget.exe update -self

Ответ 4

У меня была такая же проблема на VS2013. Мне пришлось обновить до версии VS2013 Update 5 и получить последний дистрибутив nuget для VS2013 на https://dist.nuget.org/visualstudio-2013-vsix/v2.12.0/NuGet.Tools.vsix

как только это было сделано, я смог использовать пакет Automapper 5.0.2

Ответ 5

Перейдите в Visual Studio > Инструменты > Расширение и обновления

Найти обновления в меню левого аккордеона, перейдите в галерею Visual Studio.

Вы найдете обновление для Nuget.

Обновите пакет nuget и попробуйте установить или создать проект.

Спасибо, GT

Ответ 6

Другое обходное решение, если вы застряли с VS2012 и старой версией Nuget:

  • Найдите папку Cache для диспетчера пакетов Nuget VS 2012 (с Tools - Options - Nuget Package Manager)
  • Откройте AutoMapper.5.x.x.nupkg с помощью вашего любимого Zip Tool
  • Измените файл AutoMapper.nuspec - я просто удалил все зависимости, кроме .NETFramework4.5
  • Добавить папку кэша в качестве источника Nuget (также в Tools - Options - Nuget Package Manager)
  • Установите Automapper либо с консолью, либо с графическим интерфейсом, но обязательно выберите сначала добавленную папку кэша в качестве источника пакета.

Конечно, следующая версия Automapper, вероятно, также должна быть адаптирована для ее установки.

Ответ 7

Это выглядит как несоответствие между версией .NET, используемой пакетом Automapper и вашим проектом. Можете ли вы подтвердить версию .NET, которую использует ваш проект?

Ответ 8

Automapper 6.0.2 - nuget 2.8.8 дает эту ошибку. Необходимо обновить до 3.4.4, чтобы заставить это работать.

Ответ 9

Удалены как CSharp, так и AutoMapper. Сначала установили CSharp (4.0.0.0), а затем добавили Automapper (6.1.1.0). Это решило проблему для меня.