Две разные версии сборки «Определение манифеста локализованной сборки не соответствует ссылке на сборку» - PullRequest
3 голосов
/ 17 февраля 2010

У меня есть проект, над которым я работаю, который требует использования Mysql Connector для NHibernate (Mysql.Data.dll). Я также хочу сослаться на другой проект (Migrator.NET) в том же проекте. Проблема в том, что, хотя Migrator.NET создается со ссылкой на MySql.Data с определенной версией = false, он все равно пытается ссылаться на более старую версию MySql.Data, с которой была построена библиотека, вместо того, чтобы просто использовать версию, которая существует .. и я получаю исключение, указанное в заголовке:

----> System.IO.FileLoadException: не удалось загрузить файл или сборку MySql.Data, версия = 1.0.10.1, Culture = нейтрально, PublicKeyToken = c5687fc88969c44d 'или одна из его зависимостей. Расположенный определение манифеста сборки делает не совпадает со ссылкой на сборку. (Исключение из HRESULT: 0x80131040)

Версия, на которую я ссылаюсь в основной сборке, - 6.1.3.0. Как заставить эти две сборки сотрудничать?

Edit:

Для тех из вас, кто указывает перенаправление привязки сборки, я настроил это:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-6.1.3.0" newVersion="6.1.3.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

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

Ответы [ 5 ]

3 голосов
/ 17 февраля 2010

Вы ищете Перенаправление привязки сборки .

Это позволяет настроить приложение для поиска другой версии сборки.

2 голосов
/ 17 февраля 2010

Это довольно грубое несоответствие версий.bindingRedirect не поможет, когда версии сильно отличаются.Кстати, вы ошиблись, вы бы хотели, чтобы newVersion совпадал с найденным.Но не ходите туда.

Глядя на загрузку Migrator.NET, я думаю, что вижу проблему.Папка lib содержит действительно старую версию MySql.Data.dll, она была создана для работы в .NET 1.0.Начните с защелкивания и попробуйте пересобрать версию 6 этой сборки.Удачи, думаю, тебе это понадобится.

1 голос
/ 11 марта 2010

Простым решением является удаление ссылки Mysql.data.dll (эта ссылка на старую версию MySql) из проекта Migrator.NET и добавление новой ссылки MySql.data.dll (та же версия, используемая другим проектом).Снова соберите Migrator.NET, и теперь все должно работать нормально.Я столкнулся с той же проблемой, и упомянутое мной решение отлично сработало для меня

1 голос
/ 17 февраля 2010

Если у вас есть обе версии сборки, одним из вариантов будет использовать их бок о бок и просто настроить приложение так, чтобы оно выглядело в нужном месте. Вы можете сделать это, поместив несколько строк в app.config, но для меня самым надежным способом всегда была регистрация на событие AppDomain.AssemblyResolve и указание пути к необходимой библиотеке.

Для простого примера вы можете посмотреть здесь (ответ на не очень связанный вопрос, но с использованием той же техники;))

0 голосов
/ 19 апреля 2012

Я также столкнулся с той же проблемой и не смог решить ни одно из указанных выше решений.Итак, наконец я нашел еще одно решение для этого ... Удалите все из файла license.licx в проекте => Свойства в обозревателе решений.

Когда я удалил все из этого файла, это позволяет мне успешно построить проект

...