Должен ли я беспокоиться о конфликтах версий?

Недавно я обновил компоненты devArt dotConnect для Oracle с версии 6.? до 7,2

Кажется, все работает нормально.

Однако при компиляции я вижу предупреждение: "Обнаружены конфликты между разными версиями одной и той же зависимой сборки".

Я не знаю, связано ли это с компонентами dotConnect (это не сказано), но я считаю, что это довольно хорошее предположение.

Когда я дважды щелкаю предупреждение, я получаю диалог:

MS Visual Studio -- Одна или несколько зависимых сборок имеют конфликты версий.

Вы хотите исправить эти конфликты, добавив записи перенаправления привязки в файл app.config?

Как мило из них (МС) или его (В.С.) предложить, но... что это даст? Это не говорит мне точно. Мне остаться или идти?

ОБНОВИТЬ

У меня есть ссылка на два компонента DevArt dotConnect для Oracle:

Devart.Data и Devart.Data.Oracle

Devart.Data: версия среды выполнения v2.0.50727, версия 5.0.555.0

Devart.Data.Oracle: версия среды выполнения v2.0.50727, версия 7.2.96.0

Таким образом, существует несоответствие версии, но не версии среды выполнения. Я не знаю, в этом ли проблема. Было бы неплохо, если бы предупреждающее сообщение было более явным. Предположительно, «оно» точно знает, в чем проблема — почему оно не разглашает эту важную информацию?

ОБНОВЛЕНИЕ 2

У меня есть другой проект, в котором используются те же самые две ссылки. Он даже не будет компилироваться после установки обновленных компонентов. Почему такая разница между двумя проектами? Таким образом, несмотря на то, что .DLL были одинаковыми (то же имя, то же место на диске), я удалил их, а затем снова добавил во второй проект, и все заработало нормально — ни ошибок, ни предупреждений. НО, я вернулся к первому проекту и, все еще получая то же предупреждение, удалил и снова добавил эти две ссылки/DLL - и все еще получаю то же предупреждение. Так что я до сих пор не знаю, что делать/должна ли я принять VS ее предложение/предложение перенаправить (я представляю себе телефонных операторов «старой школы», переподключающих провода в разные стороны, совершая вращение, достойное подростковых поклонников Twister). ).


person B. Clay Shannon    schedule 05.10.2012    source источник
comment
Хорошее название. Если вас явно не трясет, значит, вы недостаточно серьезно к этому относитесь. Получите немного оружия.   -  person Nick Vaccaro    schedule 06.10.2012
comment
Это пугает меня, и это даже не мое предупреждение   -  person Kai Qing    schedule 06.10.2012
comment
Кто сказал, что если вы не волнуетесь, вы не понимаете ситуацию или ... не обращаете внимания?   -  person B. Clay Shannon    schedule 06.10.2012


Ответы (2)


Записи привязки добавят разделы привязки в ваш файл web.config (или app.config), указывающие данную версию dll на другую. Однако это может быть опасно, если они несовместимы друг с другом. Они похожи

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Однако я бы прежде пошел и проверил, откуда разные проекты связывают ваши библиотеки Devart, и убедился, что все они ссылаются на одно и то же. В крайнем случае скопируйте dll-файлы Devart, которые вы хотите использовать, в папку вашего решения и сделайте так, чтобы все ваши проекты указывали на этот

person Juri    schedule 05.10.2012

Да, вам следует беспокоиться. У вас есть две сборки (скажем, MyAssembly1 и MyAssembly2), которые ссылаются на одну и ту же сборку (скажем, MySharedAssembly), но в разных версиях. Только одна версия MySharedAssembly может быть загружена и использована вашим приложением, поэтому MyAssembly1 и MyAssembly2 должны корректно работать с ней.

Нужно было бы сослаться на более старую версию MySharedAssembly. Итак, один вопрос: является ли MySharedAssembly обратной совместимостью? Если нет, то ваше приложение может работать некорректно.

Если вы добавляете перенаправление в свою конфигурацию, вы в основном говорите, что любые сборки, которые пытаются загрузить старую версию MySharedAssembly, должны вместо этого использовать более новую версию. Так что, если MySharedAssembly обратно совместим, то вам, безусловно, это сойдет с рук. Но для этого потребуется, чтобы ваше приложение имело файл конфигурации.

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

person CodeNaked    schedule 05.10.2012
comment
Есть ли способ узнать, на какую сборку ссылаются несколько других? У меня есть только один проект в этом решении, поэтому я не могу понять, как/почему это происходит. - person B. Clay Shannon; 08.10.2012
comment
@ClayShannon - Если вы загрузите свою сборку в Reflector, это скажет вам, на что ссылается каждая сборка. См. stackoverflow.com /вопросы/1455594/ - person CodeNaked; 08.10.2012
comment
Я не знаю, какая сборка вызывает проблему - сообщение об ошибке довольно расплывчато. - person B. Clay Shannon; 08.10.2012
comment
Предупреждающее сообщение, то есть (не сообщение об ошибке) - person B. Clay Shannon; 08.10.2012
comment
Похоже, речь шла о log4net; как только я обновил некоторые файлы, все было хорошо, поэтому я предполагаю, что один ссылается на одну версию log4net, а другой - на другую версию log4net. - person B. Clay Shannon; 08.10.2012
comment
@ClayShannon - вы можете загрузить свою основную сборку, затем следовать ее ссылкам и также проверять их ссылки. - person CodeNaked; 09.10.2012
comment
На самом деле это оказались компоненты DevArt — ссылались на разные их версии. - person B. Clay Shannon; 09.10.2012