Подтвердить что ты не робот

Выдача NHibernate, Fluent NHibernate и Iesi.Collection. Что бы вы попробовали дальше?

Я чрезвычайно новичок в NHibernate, поэтому извиняюсь, если мне не хватает чего-то тривиального здесь. В настоящее время я работаю над книгой под названием "NHibernate 3 Beginners Guide" из packtpub. В основном я слежу за указаниями в книге. Когда я говорю в основном, я расходился с использованием MySQL вместо MSSQL и использовал NuGet, а не загружал двоичные файлы вручную.

Я сейчас в главе 2, которая является первой настоящей главой кодирования. В этой главе я создаю простое приложение WPF для создания моей схемы базы данных с помощью нажатия кнопки. Я уже создал несколько POCO для классов Product и Category, указанных в главе. Через NuGet я добавил следующие ссылки:

  • MySQL.Data​​li >
  • NHibernate (как автоматически определяется зависимость, Iesi.Collections)
  • Свободный NHibernate

Когда я нажимаю кнопку для создания моей базы данных, выполняется следующий блок кода:

private const string connString = "string omitted for brevity";

private void btnCreateDatabase_Click(object sender, RoutedEventArgs e)
    {
        Fluently.Configure().Database(MySQLConfiguration.Standard.ConnectionString(connString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())
            .ExposeConfiguration(CreateSchema)
            .BuildConfiguration();
    }

После нажатия кнопки я получаю следующее исключение (FileLoadException):

Наружное сообщение об исключении: Could not load file or assembly 'Iesi.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Внутренние сообщения об исключениях: Could not load file or assembly 'Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Вот "Журнал Fusion", если это помогает:

=== Pre-bind state information ===
LOG: User = Borealis\Frito
LOG: DisplayName = Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
 (Fully-specified)
LOG: Appbase = file:///C:/Users/Frito/documents/visual studio 2010/Projects/NH3BeginnersGuide/Chapter2/App/Sample.UI/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : NHibernate, Version=3.3.1.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\Frito\documents\visual studio 2010\Projects\NH3BeginnersGuide\Chapter2\App\Sample.UI\bin\Debug\Sample.UI.vshost.exe.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 1.0.1.0 redirected to 4.0.0.0.
LOG: Post-policy reference: Iesi.Collections, Version=4.0.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
LOG: Attempting download of new URL file:///C:/Users/Frito/documents/visual studio 2010/Projects/NH3BeginnersGuide/Chapter2/App/Sample.UI/bin/Debug/Iesi.Collections.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Я пробовал следующее и теперь немного потерял:

  • Попытка обновления Iesi.Collections через NuGet, но это не означает, что для NHibernate нет совместимой версии.
  • Загрузка двоичных файлов для NHibernate и FluentNhibernate и ссылки на них вручную.
  • Вытягивание исходных образцов из книги и копирование через DLL в образце. Это дало мне другую ошибку, которую я еще не исследовал достаточно далеко, чтобы задавать вопросы.

У меня есть два вопроса:

  • Во-первых, почему пакеты NuGet попытаются найти версию 4. * dll, когда версии, которые отправляют, указывают на 1. *?
  • Какие еще вещи я должен попытаться получить, чтобы не получить весь источник и создать локально? Я немного потерял и буду любить другие материалы.

Спасибо заранее!

4b9b3361

Ответ 1

Святые пеоперы меня подталкивали. Я обнаружил, что в какой-то момент был создан app.config, предположительно, когда я что-то путал. В app.config я обнаружил следующее:

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

Комментируя элемент Runtime, перестройка и запуск позволили правильной работе кнопки выше. Я не уверен, что я сделал, чтобы создать это, но я рад, что нашел. Спасибо всем за ваши усилия, чтобы помочь и поблагодарить за поднятие вопроса!

Ответ 2

Iesi.Collections 4.0 - это сильно модифицированная версия с таргетингом .NET 4.0 для использования с будущим NHibernate 4.0.

К сожалению, пакеты Nuget для версий NHibernate вплоть до 3.3.1 не включают верхнюю границу для зависимости Iesi. С NHibernate 3.3.2 это было изменено, чтобы явно запретить Iesi версии 4 или выше. Поэтому, если вы обновляете NH 3.3.2 через NuGet, я ожидаю, что он разрешит зависимость Iesi от версии 3.x.