Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Предупреждение: обнаружены конфликты между разными версиями одного и того же зависимого assembly
В настоящее время я разрабатываю приложение .NET, которое состоит из 20 проектов. Некоторые из этих проектов компилируются с использованием .NET 3.5, некоторые другие все еще являются .NET 2.0 проектами (пока никаких проблем).
Проблема в том, что если я включаю внешний компонент, то всегда получаю следующее предупреждение:
"Found conflicts between different versions of the same dependent assembly".
Что именно означает это предупреждение и есть ли возможность исключить это предупреждение (например, используя #pragma disable в файлах исходного кода)?
Это предупреждение означает, что два проекта ссылаются на один и тот же assembly (например, System.Windows.Forms), но оба проекта требуют разных версий. У вас есть несколько вариантов:
Перекомпилируйте все проекты, чтобы использовать одни и те же версии (например, переместите все в .Net 3.5). Это предпочтительный вариант, поскольку весь код выполняется с версиями зависимостей, с которыми они были скомпилированы.
Добавьте перенаправление привязки . Это позволит подавить предупреждение. Однако ваши проекты .Net 2.0 будут (во время выполнения) привязаны к версиям .Net 3.5 зависимых сборок, таких как
System.Windows.Forms. Вы можете быстро добавить перенаправление привязки, дважды щелкнув на ошибке в Visual Studio.Используйте
CopyLocal=true. Я не уверен, что это подавит предупреждение. Это будет, как и вариант 2 выше, означать, что все проекты будут использовать версию .Net 3.5 System.Windows.Forms.
Вот несколько способов определить нарушителя ссылки(ов):
- Вы можете использовать такую утилиту, как та, что находится по адресу https://gist.github.com/1553265
- Еще один простой метод-установить Build детализация вывода (инструменты, опции, проекты и решения, сборка и Запуск, проекта MSBuild построения, детализации, детализация) и после построив, найдите в окне вывода предупреждение и посмотрите на текст прямо над ним. (Шляпный наконечник для пола , который предложил это в комментарии к этому ответу) .
В основном это происходит, когда сборки, на которые вы ссылаетесь, имеют "Copy Local" значение "True", что означает, что копия DLL помещается в папку bin вместе с вашим exe.
Поскольку Visual Studio также будет копировать все зависимости упомянутого assembly, можно в конечном итоге получить две разные сборки одного и того же assembly, на которые ссылаются. Это более вероятно, если ваши проекты находятся в отдельных решениях и поэтому могут быть скомпилированы отдельно.
Способ, которым я обошел его, состоит в том, чтобы установить Copy Local в False для ссылок в проектах assembly. Только сделайте это для исполняемых файлов / веб-приложений, где вам нужно assembly для запуска готового продукта.
Надеюсь, это имеет смысл!
Я хотел бы опубликовать решение паулойи, которое они предоставили в комментариях выше. Я считаю, что это лучшее решение для поиска оскорбительных ссылок.
Самый простой способ узнать, что такое "offending reference(s)" - это задать детализацию вывода сборки (инструменты, опции, проекты и решения, Сборка и запуск проекта MSBuild построения, детализации, детализация) и после построения выполните поиск предупреждения в окне вывода. Видеть текст прямо над ним.
Например, когда вы ищете панель вывода для "conflict", вы можете найти что-то вроде этого:
3> There was a conflict between "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
3> "EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was chosen because it was primary and "EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" was not.
Как вы можете видеть, существует конфликт между версиями EF 5 и 6.
У меня была такая же проблема с одним из моих проектов, однако ничто из вышеперечисленного не помогло решить предупреждение. Я проверил подробный журнал сборки, я использовал 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)
Я надеюсь, что вышеизложенное показывает, что я имею в виду, заняло у меня пару часов, чтобы выяснить, так что, надеюсь, кто-то еще тоже выиграет.
У меня была та же проблема, и я решил ее, изменив следующее в web.config.
Это случилось со мной, потому что я запускаю приложение с помощью Newtonsoft.Json 4.0
От:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
К:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
На самом деле это зависит от вашего внешнего компонента. Когда вы ссылаетесь на внешний компонент в приложении .NET, он генерирует GUID для идентификации этого компонента. Эта ошибка возникает, когда внешний компонент, на который ссылается один из ваших проектов, имеет то же имя и другую версию, что и другой такой же компонент в другом assembly.
Это иногда происходит, когда вы используете "Browse" для поиска ссылок и добавления неправильной версии assembly, или у вас есть другая версия компонента в репозитории кода, как та, которую вы установили на локальном компьютере.
Попробуйте найти, какие проекты имеют эти конфликты, удалите компоненты из списка ссылок, а затем добавьте их снова, убедившись, что вы указываете на тот же файл.
У меня есть другой способ сделать это, если вы используете Nuget для управления своими зависимостями. Я обнаружил, что иногда VS и Nuget не совпадают, а Nuget не может распознать, что ваши проекты не синхронизированы. packages.config будет говорить одно, но путь, показанный в References - Properties, будет указывать на что-то другое.
Если вы хотите обновить свои зависимости, выполните следующие действия:
Из решения Explorer щелкните правой кнопкой мыши проект и выберите команду " управление Пакеты Nuget'
Выберите вкладку 'Installed packages' в левой панели запишите установленный файл пакеты, которые вы можете скопировать в свой packages.config сначала рабочий стол, если у вас есть много, так что вы можете перепроверить его с Google, чтобы увидеть, что Nuget pkgs установлены
Удалите свои пакеты. Его OK, мы собираемся добавить их обратно.
Немедленно установите нужные вам пакеты. То, что Nuget сделает, это не только даст вам последнюю версию, но и изменит ваши ссылки, а также добавит перенаправление привязки для вас.
Сделайте это для всех ваших проектов.
На уровне решения выполните очистку и Перестроение.
Возможно, вы захотите начать с более низких проектов и перейти к более высоким уровням, а затем перестроить каждый проект по мере прохождения.
Если вы не хотите обновлять свои зависимости, то можете использовать консоль диспетчера пакетов и использовать синтаксис Update-Package -ProjectName [yourProjectName] [packageName] - Version [versionNumber]
- Открой "Solution Explorer".
- Нажмите на "Show all files"
- Развернуть "References"
- Вы увидите одну(или несколько) ссылку (ы) с немного отличающимся значком, чем rest. Как правило, это с желтой коробкой, предлагающей вам взять ее на заметку. Просто уберите его.
- Добавьте ссылку обратно и скомпилируйте свой код.
- Это все.
В моем случае была проблема с MySQL ссылкой. Так или иначе, я мог бы перечислить три его версии под списком всех доступных ссылок; для .net 2.0, .net 4.0 и .net 4.5. Я проследил процесс с 1 по 6 выше, и это сработало для меня.
По-видимому, существует проблема на Mac Visual Studio при редактировании файлов .resx. Я действительно не знаю, что произошло, но я получил эту проблему, как только я отредактировал некоторые файлы .resx на моем Mac. Я открыл проект на Windows, открыл файлы, и они были как будто не редактировались. Поэтому я отредактировал их, сохранил, и все снова заработало на Mac тоже.
Если использовать NuGet, то все, что мне нужно было сделать, это:
щелкните правой кнопкой мыши проект и выберите пункт Управление пакетами NuGet..
нажмите на шестеренку в правом верхнем углу
перейдите на вкладку Общие в Диспетчере пакетов NuGet над источниками пакетов
проверьте "Skip Applying binding redirects" в Перенаправлениях привязки
Очистите и восстановите, и предупреждение исчезло.
Проще простого