Когда я очищаю, а затем собираю свое решение, в котором есть несколько проектов, окно вывода сообщает, что сборка прошла успешно. Однако, когда я просматриваю окно списка ошибок , оно показывает мне следующее предупреждение:
Обнаружены конфликты между разными версиями одной и той же зависимой сборки, которые не удалось разрешить. Эти конфликты ссылок перечислены в журнале сборки, когда подробность журнала установлена на подробный. C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets
Когда я дважды щелкаю это сообщение, оно открывает файл C: \ Program Files (x86) \ MSBuild \ 12.0 \ bin \ Microsoft.Common.CurrentVersion.targets, но я ничего не понимаю в нем.
Я использую Visual Studio Express 2013 для Интернета.
Как я узнаю, что не так и с какой DLL и как я могу сделать так, чтобы предупреждение исчезло?
источник
Ответы:
eta: На эту статью написана потрясающая статья SO @Nick Craver, которую вы должны прочитать
В то время как другие ответы говорят это, они не делают это явным, поэтому я буду ....
На VS2013.2, чтобы фактически вызвать передачу цитируемой информации, вам не нужно читать сообщение, которое говорит:
Это неверно (или, по крайней мере, так было в некоторых версиях Visual Studio - похоже, все в порядке в обновленном VS2015 Update 3 или более поздней версии). Вместо этого включите его в Diagnostic (из Tools-> Options-> Project and Solutions-> Build and Run , установите выходную детализацию сборки проекта MSBuild ), после чего вы увидите такие сообщения:
затем
Ctrl-Alt-O
перейти к окну Построить вывод... И да, для тех, кто рассматривает детали [диагностического] сообщения, для этого невежды было новостью, что в городе существует соглашение, согласно которому все
6.x
версии являются внутренней версией сборки6.0.0.0
, т.е. только основной компонент SemVer входит в сборку. Версия :)источник
Запустите
msbuild Foo.sln /t:Rebuild /v:diag
(изC:\Program Files (x86)\MSBuild\12.0\bin
), чтобы построить свое решение из командной строки и получить немного больше информации, затем найдите то,.csproj.
что регистрирует предупреждение, и проверьте его ссылки и ссылки на другие проекты, которые используют ту же общую сборку, которая отличается в версии.Изменить: Вы также можете установить подробность сборки непосредственно в VS2013. Перейдите в меню
Tools
>,Options
затем перейдитеProjects and Solutions
и установите MSBuild verbosity вDiagnostic
.Изменить: Несколько разъяснений, как я только что получил один сам. В моем случае предупреждение было связано с тем, что я добавил ссылку, используя подсказку Resharper, в отличие от диалогового окна «Добавить ссылку», которое делало его без версии, даже несмотря на то, что и v4, и v12 доступны для выбора.
против
В журнале MSBuild с
/v:diag
многословностью это выглядело следующим образом. с указанием деталей, которые противоречили двум ссылкам:источник
msbuild "Foo.sln" /t:Rebuild /v:d > build.log
/l:FileLogger,Microsoft.Build.Engine;logfile=build.log
обратите внимание на объяснения переключателей для регистраторов здесьЯ могу только поддержать дальнейший ответ Рубена сравнением двух отображаемых сообщений:
и сообщение:
Итак, Рубен прав - это просто неправда. Нет никаких конфликтов, просто отсутствует сборка. Это особенно скучно, когда проект является приложением ASP.NET, так как представления компилируются по требованию , то есть непосредственно перед первым отображением. Это когда становится необходимым иметь доступную сборку. (Существует возможность предварительно скомпилировать представления вместе с остальной частью кода, но это уже другая история .) С другой стороны, если вы установите для многословия значение Diagnostic, вы получите следующий вывод:
В результате все, что вам нужно сделать, это либо:
Подробнее о галерее NuGet здесь . Подробнее о предварительной компиляции представлений ASP.NET здесь .
источник
Изменение детализации сборки в визуальной студии поможет указать правильное направление. Выполните следующие шаги, чтобы изменить многословие в VS
Quiet
,Minimal
,Normal
,Detailed
иDiagnostic
Проверьте окно вывода ( Ctrl+ Alt+ O) в VS, чтобы увидеть изменения в журнале сборки.
источник
Возможно, вам придется переустановить или обновить пакеты NuGet, чтобы это исправить.
источник
Manage NuGet packages for solution
-> Под нимConsolidate
можно увидеть, были ли установлены разные версии одного и того же пакетаПовторение одного из комментариев от @elshev Щелкните правой кнопкой мыши по решению -> Управление пакетами NuGet для решения -> В разделе Консолидация вы можете увидеть, были ли установлены разные версии одного и того же пакета. Обновите пакеты там. Ошибка конфликта разрешена.
источник
Я использую Visual Studio 2017 и столкнулся с этим при обновлении некоторых пакетов Nuget. Что мне помогло, так это открыть мой
web.config
файл, найти<runtime><assemblyBinding>
узел и удалить его. Сохранитеweb.config
и перестройте проект.Посмотри в
Error List
окно. Вы увидите, что выглядит как массивно длинное предупреждение о связывающих конфликтах. Дважды щелкните по нему, и он автоматически воссоздает<runtime><assemblyBinding>
блок с правильными сопоставлениями.источник
Как указано в выпуске 6583 CLI dotnet, проблема должна быть решена с помощью
dotnet nuget locals --clear all
команды.источник
Я мог бы решить эту установку Newtonsoft Json в веб-проекте с пакетами самородков
источник
Очевидно, есть много разных причин и, следовательно, множество решений этой проблемы. Чтобы добавить мой микс, мы обновили сборку (System.Net.Http), на которую ранее непосредственно ссылались в нашем веб-проекте, до версии, управляемой NuGet. Это удалило прямую ссылку в этом проекте, но наш тестовый проект все еще содержал прямую ссылку. Обновление обоих проектов для использования сборки, управляемой NuGet, решило проблему.
источник
Если вы внесли какие-либо изменения в пакеты - снова откройте sln. Это сработало для меня!
источник
Я обнаружил, что иногда пакеты nuget будут устанавливаться (что я предполагаю) .NET Core требуются компоненты или другие элементы, которые конфликтуют с уже установленной платформой. Мое решение было открыть файл проекта (.csproj) и удалить эти ссылки. Например, System.IO, System.Threading и другие, как правило, добавляются, когда Microsoft.Bcl включен через какой-то недавно установленный пакет NuGet. Там нет причин для конкретных версий тех, в моих проектах, поэтому я удаляю ссылки и сборки проекта. Надеюсь, это поможет.
Вы можете найти в файле проекта «ссылку» и удалить конфликты. Если они включены в System, избавьтесь от них, и сборка должна работать. Это может не ответить на все случаи этой проблемы - я проверяю, знаете ли вы, что сработало для меня :)
Пример того, что я прокомментировал:
источник
Я только столкнулся с этим и проблемой после переключения пакета от nuget до локально ссылающихся dll. Проблема была в старых связывающих вещах
app.config
.источник
Я последовал совету нескольких ответов здесь, чтобы выяснить, что не так, но ни один из ответов, казалось, не объяснял, как это исправить. Моя проблема заключалась в том, что одна ссылка требовала другой версии второй ссылки. Итак, Newtonsoft была на 6-й версии, но некоторые другие DLL хотели 4.5. Затем я обновил Newtonsoft, как и один из предложенных ответов, и это ухудшило ситуацию.
Так что я на самом деле понизил свою установку Newtonsoft, и предупреждение исчезло (VS 2017):
Щелкните правой кнопкой мыши Ссылки в обозревателе решений и выберите Управление пакетами NuGet ... На вкладке «Установлено» найдите Newtonsoft (или какой-либо другой конфликт). С правой стороны рядом с «Версией» появится раскрывающийся список, который можно изменить на более старую. версии. Для меня не было очевидно, что этот выпадающий список может быть использован для понижения.
источник
Вы можете запустить Dotnet CLI с полным диагностическим описанием, чтобы помочь найти проблему.
dotnet run --verbosity diagnostic >> full_build.log
После завершения сборки вы можете найти ошибку в файле журнала (full_build.log). Например, поиск «конфликта» должен привести вас к проблеме.
источник
Я удалил Microsoft ASP.NET MVC nuget.org из управления NuGet Packagaes и снова переустановил его. При переустановке он разрешил все конфликты, связанные с версией бритвы. Попробуй это .
источник
Я изменил многословность MSBuild на Diagnostic.but не мог найти, где проблема, поэтому согласно ответам выше у меня был этот код в app.config:
Поэтому я просто изменил первую Систему, Версия с 4.0.0.0 на 12.0.0.0, и мой проект сработал.
источник
Как и в других ответах, установите уровень ведения журнала вывода на подробный и найдите там конфликты, которые скажут вам, где искать дальше.
В моем случае, он отправил меня в нескольких направлениях в поисках источника ссылок, но в итоге оказалось, что проблема была в одном из моих проектов переносимых библиотек классов, он был нацелен на неправильную версию и тянул свою собственную версия ссылок в, следовательно, конфликты. Быстрая переориентация и проблема была решена.
источник
У меня было это предупреждение после перехода на ссылку на пакет. В диагностическом выводе была информация о том, что на библиотеку ссылалась та же библиотека. Это может быть ошибка новой ссылки на пакет. Решение состояло в том, чтобы включить AutoGenerateBindingRedirects и удалить пользовательское перенаправление привязки.
источник
VS 2017, проект MVC
Я не знаю почему, но для меня решение этой проблемы состояло в том, чтобы удалить
out
параметр из сигнатуры метода модели, который был вызван из метода действия контроллера. это очень странное поведение, но это было решением моей проблемы.источник
Запустить
Update-Package
команду через консоль диспетчера пакетовЭто исправит MSB3277, для чего он переустановит все пакеты и все связанные с ними сборки до максимально возможной версии . Также возможно обновить только конкретный пакет. Или понизьте версию после обновления, если хотите, эта исправленная проблема для меня несколько раз поднималась. В зависимости от количества пакетов nuget этот процесс может занять несколько минут.
Больше информации на официальных документах https://docs.microsoft.com/en-us/nuget/consume-packages/reinstall-and-updating-packages
источник