Разрешение конфликтов MSB3247 - найдено между различными версиями одной и той же зависимой сборки
решение .NET 3.5 закончилось с этим предупреждением при компиляции с msbuild.
иногда NDepend может помочь, но в этом случае он не дал никаких дополнительных подробностей. Как Боб мне пришлось прибегнуть к открытию каждой сборки в ILDASM, пока я не нашел тот, который ссылался на более старую версию зависимой сборки.
Я попытался использовать MSBUILD от VS 2010 Beta 2 (как указано в статье Connect это было исправлено в следующей версии CLR), но это также не дало никаких подробностей (возможно, исправлена бета-версия 2)
есть ли лучший (более автоматизированный) подход?
14 ответов:
измените " MSBuild project build output verbosity "на" Detailed " или выше. Для этого выполните следующие действия:
- откройте диалоговое окно Параметры (Сервис -> Параметры...).
- в левом дереве, выберите проекты и решения узел, а затем выберите построить и запустить.
- Примечание: если этот узел не отображается, убедитесь, что флажок в нижней части диалогового окна показать все параметры проверяемый.
на появившейся странице Инструменты/Параметры установите MSBuild project build output verbosity уровень до соответствующей настройки в зависимости от вашей версии:
- Диагностика когда на VS2012, VS2013 или VS2015 (сообщение в этих версиях говорит вы должны использовать "полная", но это неправильно, вы должны использовать "Диагностика")
- полная когда вы находитесь на VS2010
- нормальный будет достаточно в VS2008 или старше.
- создать проект и посмотреть в окне вывода.
Проверьте сообщения MSBuild. Элемент
ResolveAssemblyReferencesзадача, которая является задачей, из которой исходит MSB3247, должна помочь вам отладить эту конкретную проблему.мой конкретный случай был неправильной ссылкой на SqlServerCe. Видеть под. У меня было два проекта, ссылающихся на две разные версии SqlServerCe. Я пошел в проект со старой версией, удалил ссылку, а затем добавил правильную ссылку.
Target ResolveAssemblyReferences: Consider app.config remapping of assembly "System.Data.SqlServerCe, ..." from Version "3.5.1.0" [H:\...\Debug\System.Data.SqlServerCe.dll] to Version "9.0.242.0" [C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PublicAssemblies\System.Data.SqlServerCe.dll] to solve conflict and get rid of warning. C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : warning MSB3247: Found conflicts between different versions of the same dependent assembly.
вам не нужно открывать каждую сборку, чтобы определить версии ссылочных сборок.
- вы можете проверить свойства каждой ссылки.
- откройте свойства проекта и проверьте версии раздела ссылки.
- открыть проекты с текстовым редактором.
- Используйте Отражатель .Net.
Майк Хэдлоу и опубликовано небольшое консольное приложение под названием AsmSpy Это довольно красиво перечисляет ссылки каждой сборки:
Reference: System.Net.Http.Formatting 4.0.0.0 by Shared.MessageStack 4.0.0.0 by System.Web.Http Reference: System.Net.Http 2.0.0.0 by Shared.MessageStack 2.0.0.0 by System.Net.Http.Formatting 4.0.0.0 by System.Net.Http.WebRequest 2.0.0.0 by System.Web.Http.Common 2.0.0.0 by System.Web.Http 2.0.0.0 by System.Web.Http.WebHostЭто гораздо более быстрый способ добраться до нижней части предупреждения MSB3247, чем зависеть от вывода MSBuild.
Я обнаружил, что (по крайней мере, в Visual Studio 2010) вам нужно установить многословность вывода по крайней мере подробно, чтобы иметь возможность определить проблему.
возможно, моя проблема была ссылкой, которая ранее была ссылкой GAC, но это больше не было так после переустановки моей машины.
иногда @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
Это предупреждение генерируется по умолчанию ASP.NET MVC 4 beta посмотреть здесь
In, любое приведение это предупреждение может быть устранено путем ручного редактирования .csproj файл для вашего проекта.
изменить........: Ссылка Include= "System. Net. Http"
читать ......: Ссылка Include= "System.Net. Http, Version=4.0.0.0"
используйте средство чтения зависимостей
используя dep.exe вы можете перечислить все вложенные зависимости целой папки. В сочетании с инструментами unix, такими как grep или awk, это может помочь вам решить вашу проблему
Поиск сборок, на которые ссылаются более чем в одной версии
$ dep | awk '{ print " " ; print " " }' | awk '{ if (length(versions[]) == 0) versions[] = ; if (versions[] != ) errors[] = ; } END{ for(e in errors) print e } ' System.Web.Httpэта неясная командная строка запускает dep.exe затем передает вывод дважды в awk to
- поставить родителя и ребенка в один столбец (по умолчанию каждый строка содержит одного из родителей и ребенка, чтобы выразить тот факт, что этот родитель зависит от ребенка)
- затем сделайте своего рода "группу по", используя ассоциативный массив
понимание того, как эта сборка была вытащена в вашем бункере
$ dep myproject/bin | grep -i System\.Web\.Http MyProject-1.0.0.0 >> System.Web.Http.Web-5.2.3.0 2 ( FooLib-1.0.0.0 ) MyProject-1.0.0.0 >> System.Web.Http.Web-4.0.0.0 2 ( BarLib-1.0.0.0 ) FooLib-1.0.0.0 > System.Web.Http.Web-5.2.3.0 1 BarLib-1.0.0.0 > System.Web.Http.Web-4.0.0.0 1в этом примере инструмент покажет вам эту систему.Сеть.Http 5.2.3 исходит из вашей зависимости от FooLib, тогда как версия 4.0.0 исходит от BarLib.
тогда у вас есть выбор между
- убедить владельцев библиотек использовать ту же версию
- прекратите использовать один из них
- добавление привязки перенаправляет в файле конфигурации, чтобы использовать последнюю версию
как запустить эти вещи в Windows
если у вас нет оболочки типа unix, вам нужно будет загрузить ее перед запуском
awkиgrep. Попробуйте одно из следующих
У меня была та же ошибка, и я не мог понять это с другими ответами. Я обнаружил, что мы можем "консолидировать" пакеты NuGet.
- Правой Кнопкой Мыши на решение
- Нажмите Управление Пакетами Nuget
- консолидация вкладки и обновление до той же версии.
У меня тоже была эта проблема, и я использовал совет Амисико тоже обнаружить проблему (хотя пришлось установить уровень детализации до подробностей.
проблема была на самом деле довольно прямо вперед, хотя после нахождения виновника.
фон: Я модернизировал свой проект из VS2008 в VS2010. В VS2008 целевой фреймворк был 3.5, и когда я привел его в VS2010, я переключил его на 4 (полный). Я также обновил некоторые сторонние компоненты, включая Crystal reports.
Это оказалось, что большинство системных ссылок, указывающих на версию 4.0.0.0, но пара не была автоматически изменена (система и система.Сеть.Услуги) и все еще смотрели на 2.0.0.0. Crystal reports ссылается на 4.0.0.0, и поэтому именно здесь происходили конфликты. Просто поставив курсор на первую системную библиотеку в обозревателе решений, курсор вниз по списку и поиск любых ссылок на 2.0.0.0, удаление и повторное добавление новой версии 4.0.0.0 сделали уловка.
странно это было то, что большинство ссылок были правильно обновлены, и если бы не Crystal reports, я, вероятно, никогда бы не заметил...
Я сделал приложение на основе Майк Хэдлоу применение: AsmSpy.
мое приложение-это приложение WPF с графическим интерфейсом и может быть загружено с моего домашнего веб-сервера:AsmSpyPlus.exe.
код доступен на: GitHub
Как уже упоминалось здесь, вам нужно удалить неиспользуемые ссылки и предупреждения будут идти.
ASP.NET build manager создает веб-сайт, просматривая папки в алфавитном порядке, и для каждой папки он выясняет ее зависимости и сначала строит зависимости, а затем выбранную папку.
в этом случае проблемная папка, которая является ~ / Controls, выбирается для сборки в начале, по еще неизвестной причине, она строит некоторые элементы управления там как отдельную сборку, а не внутри той же сборки, что и другие элементы управления (кажется, подключены к тому, что некоторые элементы управления зависят от других элементов управления в той же папке).
затем следующая папка, которая строится (~/File-Center/ Control), зависит от корневой папки~/, которая зависит от ~/Controls, поэтому папка ~ / Controls строится снова только на этот раз элементы управления, которые были разделены на их собственную сборку, теперь присоединены к той же сборке, что и другие элементы управления с разделенной сборкой, на которую все еще ссылаются.
Итак, в этот момент 2 сборки (по крайней мере) имеют те же элементы управления, и сборка не выполняется.
хотя мы все еще не знаем, почему это произошло, мы смогли обойти это, изменив имя папки элементов управления на ZControls, таким образом, он не построен до ~/File-Center/Control, только после и таким образом он построен так, как должен.
Быстро Исправить:
щелкните правой кнопкой мыши на решение - > управление NuGet пакеты для решения - > под объединение вы можете увидеть, если есть разные версии одного и того же пакета были установлены. Удалите различные версии и установите последнюю.
самый простой способ без без одного с учетом (внутренних) зависимостей:
- Откройте "Обозреватель Решений".
- нажмите на кнопку "Показать все файлы"
- Расширить "Список Литературы"
- вы увидите одну(или несколько) ссылку (ы) с немного другим значком, чем остальные. Как правило, это с желтой коробкой, предлагающей вам взять ее на заметку. Просто уберите его.
- добавьте ссылку Назад и скомпилируйте свой код.
- вот все.
в моем случае была проблема с ссылкой на MySQL. Так или иначе, я мог бы перечислить три версии этого под списком всех доступных ссылок. Я следовал за процессом с 1 по 6 выше, и это сработало для меня.
Visual Studio для сообщества Mac дополнение:
Как AMissico это требуется изменить уровень журнала, и ни ASMSpy, ни ASMSpyPlus не доступны в качестве кросс-платформенного решения, вот краткое дополнение для Visual Studio для Mac:
https://docs.microsoft.com/en-us/visualstudio/mac/compiling-and-building
Это Сообщество Visual Studio настройки ... .. → Проекты → Сборка Журнал → многословие


Comments