NDbUnit Конфликт версии сборки MySQL - PullRequest
1 голос
/ 22 апреля 2010

Я пытаюсь использовать NHiberanate с NDbUnit, но не могу, поскольку NDbUnit пытался загрузить MySql.Data версии 1.0.10.1, а NHibernate пытается загрузить версию 6.2.2.0, и я могу ссылаться только на один из них.

Вот ошибка, которую я получаю, когда пытаюсь запустить NDbUnit

Set Up
System.IO.FileLoadException: Could not load file or assembly 'MySql.Data, Version=1.0.10.1, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder.GetConnection(String connectionString)
   at NDbUnit.Core.DbCommandBuilder..ctor(String connectionString)
   at NDbUnit.Core.MySqlClient.MySqlDbCommandBuilder..ctor(String connectionString)
   at NDbUnit.Core.MySqlClient.MySqlDbUnitTest.CreateDbCommandBuilder(String connectionString)
   at NDbUnit.Core.NDbUnitTest.GetDbCommandBuilder()
   at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(Stream xmlSchema)
   at NDbUnit.Core.NDbUnitTest.ReadXmlSchema(String xmlSchemaFile)
   at Proteus.Utility.UnitTest.DatabaseUnitTestBase.SaveDatabase(String connectionString, String schemaFilePathName, String datasetFilePathName, DatabaseClientType clientType)
   at TGS.UserAccountControlTest.UserAccountManagerTest._TestFixtureSetup() in C:\Documents and Settings\Michal\My Documents\Visual Studio 2008\Projects\TGS\TGS.UserAccountControlTest\UserAccountManagerTest.cs:line 69

У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Вы можете попробовать перенаправление привязки в файле конфигурации:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MySql.Data"
                          publicKeyToken="c5687fc88969c44d"
                          culture="neutral" />
        <bindingRedirect oldVersion="1.0.10.1"
                         newVersion="6.2.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Это может не сработать, если две сборки подписаны с другим ключом.Кроме того, разрыв между V1 и V6 кажется довольно большим, методы, на которые вы полагаетесь, не должны были меняться между этими версиями.

На самом деле в вашем случае это, вероятно, должно быть:

oldVersion="6.2.2.0"
newVersion="1.0.10.1"
1 голос
/ 23 апреля 2010

Если перенаправление привязки сборки кажется «хакерским» (его совсем нет) или «неудобно хрупким» (это часто бывает), вы также можете просто перекомпилировать NDbUnit против вашей «требуемой» сборки MySql.Data (так как NDbUnit открыт источник), получая источник от http://ndbunit.googlecode.com

Насколько мне известно (как основной коммиттер для проекта NDbUnit), НЕТ критических изменений в MySql.Data Betw. v1x и v6x. Целью сборки MySql.Data является просто предоставление специфичных для MySql реализаций «семейства» интерфейса, составляющего стек ADO.NET (IDbConnection, IDBCommand и т. Д.), И поэтому, по определению, не может быть критических изменений в MySql. Сборка данных от v1 до v6 (поскольку MS не касалась этих интерфейсов с момента выпуска .NET 2.0).

ЕДИНСТВЕННОЕ различие между более ранними реализациями этих интерфейсов MySql.Data и более поздними MySql.Data заключается в версии MySql, которую они предназначены поддерживать, так что пока сторона этой сборки, обращенная к базе данных, со временем изменяется, код -facing 'сторона классов, содержащихся в этой сборке, вроде BY DEFINITION не могла измениться от одной вершины к следующей.

Удачи ~!

...