2016-04-19 3 views
1

У меня есть проект, скажем проект A. Это проект dll (Class Library). Целевая структура - .NET 4.0 (не клиентский профиль). Я добавил в этот проект самородок для Azure Storage, который сам добавил кучу других ссылок. Проект строится без проблем.разрешить зависимость NewtonSoft в проекте NET4.0

В том же решении у меня есть другой проект, скажем, проект B. Проект B также является проектом dll (Class Library). Целевая структура также представляет собой .NET 4.0 (а не профиль клиента). Он также содержит множество ссылок на другие библиотеки, но сам по себе он отлично работает.

Проблема возникает, когда я добавляю ссылку на проект A в проекте B. Это больше не компилируется, и корень проблемы, я думаю, связан с серией этих предупреждений в начале компиляции

1> C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets (1697,5): предупреждение MSB3275: Основная ссылка «...» не может быть решена, потому что он имеет косвенную зависимость от сборки «Newtonsoft.Json, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed», которая была построена против «.NETFramework, Version = v4.5». Это более высокая версия, чем текущая целевая среда «.NETFramework, Version = v4.0».

Проект B на самом деле использует JSON NewtonSoft 4.5.0.0 во многих местах, но я понимаю, что Azure nugget нуждается в JSON NewtonSoft 6.0. Я не понимаю, почему проект A правильно компилируется в NET4.0, но генерирует ошибку при связывании в проекте B.

Мне нужно использовать NewtonSoft 4.5.0.0 в проекте B (для меня это невозможно обновить проект B до JSON NewtonSoft 6.0).

Это также невозможно для меня, чтобы перейти на NET4.5

я нашел в ... \ пакеты \ Newtonsoft.Json.6.0.8 \ Lib какую-нибудь папку с net45 DLL из Newtonsoft и удалять их перед восстановлением , ни один аваль.

+0

Это не должно произойти, и когда я его не проверял, тот, который скопирован в каталог сборки проекта, безусловно, тот, который пришел из каталога lib \ net40. Вам нужно будет опубликовать подробную диаграмму построения проекта A, чтобы получить возможную причину. –

+0

С удовольствием. Как мне это сделать ? –

ответ

1

Это раздражающая проблема, которую создает Visual Studio сама по себе.

Короче говоря:

  • Visual Studio находит зависимость, которую необходимо добавить в свой «бункер» для того, чтобы ваше приложение для работы
  • Первого длл, что он находит в любом из бин папков ваши проектных решений он используется
  • Если первая DLL найдено не соответствует версии, он выдает эту ошибку во время компиляции

Как я решил эту проблему:

  • Найти все DLL файлы с неправильной версии (щелкните правой кнопкой мыши -> свойства) во всех проектах и ​​удалять их, оставляя только DLL с правильной версией
  • Очистка и восстановление

Другой способ решения этой:

  • используйте NuGet обновить зависимость: он будет использовать новейшую версию и заменить все ваши зависимости во всех проектах, что позволяет компилировать
+0

Если я использую самородок для обновления зависимостей в проекте B, смогу ли я по-прежнему использовать в нем NewtonSoft 4.5.0.0? –

+0

, поэтому вам нужно использовать BOTH-версии в разных проектах? : O – Th0rndike

+0

Ну, может быть, я не понял в своем вопросе. Я не могу изменить проект версии NewtonSoft, который использует (4.5.0.0, он уже предварительно скомпилирован в другой папке, переключение на другую версию может сломать материал, мне было запрещено это делать). Project A, однако, нуждается в NewtonSoft 6.0.0.0 (этот обновляется самородком, поэтому проблем нет). –

Смежные вопросы