Решение .NET 3.5 заканчивалось этим предупреждением при компиляции с msbuild.
Иногда NDepend может помочь, но в этом случае он не дает никаких дополнительных подробностей. Как и Бобу, мне пришлось прибегнуть к открытию каждой сборки в ILDASM, пока я не нашел ту, которая ссылалась на более старую версию зависимой сборки.
Я действительно пытался использовать MSBUILD из VS 2010 Beta 2 (как указывалось в статье о подключении, это было исправлено в следующей версии CLR), но это также не давало более подробной информации (возможно, исправлено после Beta 2)
Есть ли лучший (более автоматизированный) подход?
Ответы:
Измените «Детальность вывода сборки проекта MSBuild» на «Подробно» или выше. Для этого выполните следующие действия:
На открывшейся странице инструментов / параметров установите уровень детализации выходных данных сборки проекта MSBuild в зависимости от вашей версии:
Проверьте сообщения MSBuild.
ResolveAssemblyReferences
Задача, это задача , с которой MSB3247 берет свое начало, должно помочь вам отладить этот конкретный вопрос.Мой конкретный случай был неправильной ссылкой на SqlServerCe. См. ниже. У меня было два проекта, ссылающихся на две разные версии SqlServerCe. Я пошел в проект с более старой версией, удалил ссылку, затем добавил правильную ссылку.
Вам не нужно открывать каждую сборку, чтобы определить версии ссылочных сборок.
источник
Майк Хэдлоу опубликовал небольшое консольное приложение под названием AsmSpy, в котором довольно приятно перечисляются ссылки на каждую сборку:
Это гораздо более быстрый способ добраться до сути предупреждения MSB3247, чем зависеть от вывода MSBuild.
источник
Иногда @AMissico ответа недостаточно. В моем случае я не смог найти ошибку в окнах вывода, поэтому я решил создать файл журнала и проанализировать его, выполнив следующие шаги:
Сохранение журнала сборки в файл ... https://msdn.microsoft.com/en-us/library/ms171470.aspx
msbuild MyProject.proj /fl /flp:logfile=MyProjectOutput.log;verbosity=detailed
Найдите текст:
warning MS...
или конкретную информацию о предупреждении: (например, строка 9293),Found conflicts between different versions...
и полная информация об ошибке конфликта будет выше этого сообщения (например, строка 9277)There was a conflicts between...
Visual Studio 2013
источник
Я обнаружил, что (по крайней мере, в Visual Studio 2010) вам нужно установить выходную детализацию, по крайней мере, Подробную, чтобы можно было выявить проблему.
Может быть, моя проблема была ссылкой, которая ранее была ссылкой GAC, но это было уже не так после переустановки моей машины.
источник
У меня была такая же ошибка, и я не мог понять это с другими ответами. Я обнаружил, что мы можем «консолидировать» пакеты NuGet.
источник
Это предупреждение генерируется для бета-версии ASP.NET MVC 4 по умолчанию, см. Здесь
источник
Используйте читателя зависимостей
Используя dep.exe, вы можете перечислить все вложенные зависимости всей папки. В сочетании с инструментами Unix, такими как grep или awk, он может помочь вам решить вашу проблему
Поиск сборок, на которые есть ссылки в более чем одной версии
Эта неясная командная строка запускает dep.exe, затем дважды передает выходные данные в awk
Понимание того, как эта сборка оказалась в вашей корзине
В этом примере инструмент покажет вам, что System.Web.Http 5.2.3 происходит от вашей зависимости от FooLib, а версия 4.0.0 - от BarLib.
Тогда у вас есть выбор между
Как запустить эти вещи в Windows
Если у вас нет оболочки типа Unix, вам необходимо скачать ее, прежде чем запускать
awk
иgrep
. Попробуйте одно из следующихисточник
У меня тоже была эта проблема, и я воспользовался советом AMissico, чтобы выяснить проблему (хотя для уровня детализации пришлось установить значение «Подробно».
Проблема была на самом деле довольно прямой, хотя после обнаружения виновника.
Предыстория: я обновил свой проект с VS2008 до VS2010. В VS2008 целевой фреймворк был 3.5, и когда я перенес его в VS2010, я переключил его на 4 (Full). Я также обновил некоторые сторонние компоненты, включая отчеты Crystal.
Оказалось, что большинство ссылок System, где указывалось на версию 4.0.0.0, но пара не была автоматически изменена (System и System.Web.Services) и все еще смотрели на 2.0.0.0. Crystal Reports ссылается на 4.0.0.0, и именно здесь возникли конфликты. Просто поместив курсор на первую Системную библиотеку в обозревателе решений, наведите курсор вниз по списку и ищите любые ссылки на 2.0.0.0, удаляя и повторно добавляя более новую версию 4.0.0.0, сделали свое дело.
Странно то, что большинство ссылок было правильно обновлено, и если бы не отчеты Crystal, я бы, наверное, никогда бы этого не заметил ...
источник
Я сделал приложение на основе приложения Майка Хэдлоу: AsmSpy .
Мое приложение представляет собой приложение WPF с графическим интерфейсом и может быть загружено с моего домашнего веб-сервера: AsmSpyPlus.exe .
Код доступен по адресу: GitHub
источник
Как упомянуто здесь , вам нужно удалить неиспользованные ссылки, и предупреждения уйдут.
источник
ASP.NET build manager строит веб-сайт, просматривая папки в алфавитном порядке, и для каждой папки он определяет свои зависимости и сначала строит зависимости, а затем выбранную папку.
В этом случае проблемная папка ~ / Controls выбирается для создания в начале, но по неизвестной причине она создает некоторые элементы управления там как отдельную сборку, а не внутри той же сборки, что и другие элементы управления (кажется, быть связано с тем, что некоторые элементы управления зависят от других элементов управления в той же папке).
Затем следующая создаваемая папка (~ / File-Center / Control) зависит от корневой папки ~ /, которая зависит от ~ / Controls, поэтому папка ~ / Controls строится снова только на этот раз, когда элементы управления были разделены к своей собственной сборке теперь присоединяются к той же сборке, что и другие элементы управления, при этом на отдельную сборку все еще ссылаются.
Таким образом, на этом этапе 2 сборки (по крайней мере) имеют одинаковые элементы управления, и сборка завершается неудачно.
Хотя мы до сих пор не знаем, почему это произошло, мы смогли обойти это, изменив имя папки Controls на ZControls, таким образом, оно не собирается до ~ / File-Center / Control, а только после и таким образом оно создается как это должно.
источник
Быстрая починка:
Щелкните правой кнопкой мыши решение -> Управление пакетами NuGet для решения -> В разделе Консолидация вы можете увидеть, были ли установлены разные версии одного и того же пакета. Удалите разные версии и установите последнюю.
источник
Иногда
AutoGenerateBindingRedirects
не достаточно (даже сGenerateBindingRedirectsOutputType
). Поиск всехThere was a conflict
записей и их ручное исправление могут быть утомительными, поэтому я написал небольшой фрагмент кода, который анализирует выходные данные журнала и генерирует их для вас (dumps tostdout
):Совет: используйте MSBuild Binary and Structured Log Viewer и генерируйте только перенаправления привязки для конфликтов в проекте, который выдает предупреждение (то есть только после этих
there was a conflict
строк во входной текстовый файл для кода выше [AssemblyConflicts.txt
]).источник
Самый простой способ без учета без учета (внутренних) зависимостей:
В моем случае возникла проблема со ссылкой на MySQL. Так или иначе, я мог бы перечислить три его версии под списком всех доступных ссылок. Я следовал процессу с 1 по 6 выше, и он работал для меня.
источник
Добавление Visual Studio для Mac сообщества:
Поскольку ответ AMissico требует изменения уровня журнала, и ни ASMSpy, ни ASMSpyPlus не доступны в качестве кроссплатформенного решения, вот краткое дополнение для Visual Studio для Mac:
Это в сообществе Visual Studio → Настройки ... → Проекты → Журнал сборки → Многословие
источник
Если у вас есть резкость, удалите все неиспользуемые ссылки в вашем решении.
источник