[.net] Предупреждение: обнаружены конфликты между различными версиями одной и той же зависимой сборки


Answers

В основном это происходит, когда на собраниях, на которые вы ссылаетесь, есть «Копировать локальную», установленную в «True», что означает, что копия DLL помещается в папку bin вместе с вашим exe.

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

Способ, которым я обходился, - установить Копировать Локальное в Ложь для ссылок в проектах сборки. Делайте это только для исполняемых файлов / веб-приложений, где вам нужна сборка для запуска готового продукта.

Надеюсь, это имеет смысл!

Question

В настоящее время я разрабатываю приложение .NET, которое состоит из 20 проектов. Некоторые из этих проектов скомпилированы с использованием .NET 3.5, некоторые из них все еще являются проектами .NET 2.0 (пока не проблема).

Проблема в том, что если я включаю внешний компонент, я всегда получаю следующее предупреждение:

"Found conflicts between different versions of the same dependent assembly".

Что именно означает это предупреждение, и возможно ли исключить это предупреждение (например, с помощью #pragma disable в файлах исходного кода)?




Другое дело, чтобы рассмотреть и проверить, убедитесь, что у вас нет службы, использующей эту папку bin. если они остановят сервис и перестроят решение




Это зависит от вашего внешнего компонента. Когда вы ссылаетесь на внешний компонент в приложении .NET, он генерирует идентификатор GUID для идентификации этого компонента. Эта ошибка возникает, когда внешний компонент, на который ссылается один из ваших проектов, имеет одно и то же имя и другую версию, как другой такой компонент в другой сборке.

Иногда это происходит, когда вы используете «Обзор», чтобы найти ссылки и добавить неправильную версию сборки, или у вас есть другая версия компонента в вашем репозитории кода, как тот, который вы установили на локальном компьютере.

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




=> проверьте, будет ли установлен экземпляр приложения частично.

=> прежде всего удалите этот экземпляр из приложения для удаления.

=> затем, очистить, перестроить и попытаться развернуть.

это решило мою проблему. Надеюсь, это вам тоже поможет. С наилучшими пожеланиями.




Это случилось и со мной. Одна dll была указана дважды: один раз напрямую (в ссылках) и один раз косвенно (ссылка на другой ссылочный проект). Я удалил прямую ссылку, очистил и восстановил решение. Проблема исправлена.




В Visual Studio, если вы щелкните правой кнопкой мыши по решению и управляете пакетами nuget, выполните вкладку «Консолидация», которая устанавливает все пакеты в одну и ту же версию.




У меня была одна и та же проблема с одним из моих проектов, однако ни одно из указанных выше не помогло решить проблему. Я проверил подробный файл журнала сборки, я использовал AsmSpy, чтобы проверить, что я использовал правильные версии для каждого проекта в затронутом решении, я дважды проверял фактические записи в каждом файле проекта - ничего не помогло.

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

Solution A
+--Project A
   +--Reference A (version 1.1.0.0)
   +--Reference B
+--Project B
   +--Reference A (version 1.1.0.0)
   +--Reference B
   +--Reference C
+--Project C
   +--Reference X (this indirectly references Reference A, but with e.g. version 1.1.1.0)

Solution B
+--Project A
   +--Reference A (version 1.1.1.0)

Надеюсь, что вышеизложенное показывает, что я имею в виду, взял пару часов, чтобы узнать, так что, надеюсь, кто-то еще выиграет.




Links