Выпуск с NHibernate, свободно NHibernate и Iesi.Collection. Что бы вы попробовали дальше?

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

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

  1. MySQL.Data
  2. NHibernate (как зависимость автоматически разрешается, Iesi.Collections)
  3. Свободный 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's 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's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Вот "Fusion Log", если это помогает:

=== 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.

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

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

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

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

Заранее спасибо!

2 ответа

Решение

Святой Пуперс это сводило меня с ума. Я обнаружил, что 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 элемент, восстановление и запуск позволили кнопке выше функционировать должным образом. Я не уверен, что я сделал, чтобы это сработало, но я рад, что нашел это. Спасибо всем за ваши усилия по оказанию помощи и спасибо за ответ на этот вопрос!

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.

Другие вопросы по тегам