среда, 25 января 2012 г.

Установка Firebird Net Provider для разных версий .Net Framework

Работа с этим провайдером Firebird под .Net Framework для меня в новинку, но, имея за плечами трехлетний опыт работы с провайдером для MySQL, я не ожидал подвоха - а зря. Хотя разработчики и выложили на официальном сайте установочный пакет, процесс установки оказался гораздо сложнее серии кликов по кнопке "Далее". Во-первых. Установщик всего лишь складывает несколько файлов в папку "c:\Program Files\FirebirdClient\", регистрацию в GAC нужно делать ручками, но и здесь заботливо подложены грабельки, о них далее... Во-вторых. Опять же, хотя разработчики и написали, что Version 2.7.0 for .NET 4.0/3.5/2.0 with Entity Framework support, но на самом деле работать с этим провайдером можно только из под 4 фреймворка, 3.5 его не увидит. И так, доделываем работу разработчиков, и устанавливаем дополнительно DDEX Provider for Visual Studio downloads (интегрирует провайдер в Visual Studio для конструирования источников данных непосредственно из IDE) Первое. Не качаем, а если скачали удаляем нафиг msi пакет с оф-сайта. На данный момент актуальной является версия 2.7.0. Находим на сайте архив NETProvider-2.7.0.zip и, если необходимо, NETProvider-2.7.0-NET35.7z. Скачиваем. В первом архиве лежит сборка провайдера под 4 фреймворк, во втором под третий. Создаем в Programm Files папку с говорящим названием FirebirdClient и в ней папки net3.5 и net4.0. Распаковываем содержимое архивов соответствующим образом, каждый в свою папку. Теперь нужно зарегистрировать провайдер в кеше сборок, каждый в своем. Так как в комплекте с Visual Studio идет gacutil только для 4 фреймворка, то для 3.5 нужно искать свой. Лежит он по следующему адресу "c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe". Запускаем его и выполняем следующую команду:
gacutil -i "c:\Program Files\FirebirdClient\net3.5\FirebirdSql.Data.FirebirdClient.dll" 
Получаем сообщение, что сборка успешно добавлена в кеш и радуемся. Если получаем вот такое "This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.", то в папку net3.5 попала сборка провайдера для 4 фреймворка Для 4 фреймворка повторяем операцию. gacutil можно запустить как и через Пуск-Программы-Visual Studio 2010-Visual Studio Tools-Командная строка Visual Studio (2010) или же взять его рядышком "c:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe". Выполняем комманду:
gacutil -i "c:\Program Files\FirebirdClient\net4.0\FirebirdSql.Data.FirebirdClient.dll"
Все можно жить и не тужить, писать код для подключения в бд и т.д., не забывая, правда, добавить FirebirdSql.Data.FirebirdClient.dll в Reference. Но для пущего удобства добавим DDEX. Скачиваем FirebirdDDEXProvider-2.0.5.zip, распаковывем в папку "c:\Program Files\FirebirdClient\FirebirdDDEX". Теперь нужно зарегистрировать провайдер и DDEX в machine.config, для каждой версии фреймворка отдельно. Ищем по адресу c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\, открываем machine.config и редактируем:
<configuration>
  <configsections>
    ...
    </configsections></configuration>
<section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    ...
  <configsections>
...
  <system.data>
   <dbproviderfactories>
      ...
      <add description=".Net Framework Data Provider for Firebird" invariant="FirebirdSql.Data.FirebirdClient" name="FirebirdClient Data Provider" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.7.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c">
      ...
    </dbproviderfactories>
  </system.data>

</configsections>
Ищем по адресу c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Config\, открываем machine.config и редактируем:
<configuration>
  <configsections>
    ...
    </configsections></configuration>
<section name="firebirdsql.data.firebirdclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    ...
  <configsections>
...
  <system.data>
   <dbproviderfactories>
      ...
      <add description=".Net Framework Data Provider for Firebird" invariant="FirebirdSql.Data.FirebirdClient" name="FirebirdClient Data Provider" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient, Version=2.7.0.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c">
      ...
    </dbproviderfactories>
  </system.data>

</configsections>
В папке c:\Program Files\FirebirdClient\FirebirdDDEX\reg_files\VS2010\ открываем на редактирование FirebirdDDEXProvider32.reg находим в нем строку с "CodeBase", заменяем ее на: "CodeBase"="C:\\Program Files\\FirebirdClient\\FirebirdDDEX\\FirebirdSql.VisualStudio.DataTools.dll" сохраняем, запускаем. Далее можно перезагрузить компьютер и радуемся!