Разверните приложение Windows без установки Sqlite .net провайдера

Я использую SubSonic 3 с SQLite 3 для приложения Windows. Установка.NET-провайдера для SQLite (System.Data.SQLite) была обязательной для меня при программировании приложения, мое требование для развертывания приложения: я просто хочу создать один устанавливаемый и пропустить часть для установки.NET-провайдера для SQLite на клиентская машина.

Я добавил ссылки System.Data.SQLite в GAC(в проекте установки), но это не сработает, потому что при запуске приложения написано

System.ArgumentException: не удалось найти запрошенный поставщик данных.Net Framework. Это не может быть установлено.

Я уверен, что для этого есть обходной путь, поэтому не нужно устанавливать поставщик.Net Framework для SQLite на клиентском компьютере.

-mmcmedic

2 ответа

Помимо копирования драйвера БД.dll с вашим приложением, вам также может понадобиться зарегистрировать DbProviderFactory.

Обычно установщик также регистрирует имя поставщика данных в.NET machine.config файл, так что ADO.NET может преобразовать строку имени поставщика в фактическое имя сборки. Вместо этого вы можете добавить это прямо в ваш файл app.config. У меня нет примера SQLite, но у меня есть это в моем app.config для MySql:

<configuration>
  ...
  <system.data>
    <DbProviderFactories>
      <clear/>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
    </DbProviderFactories>
  </system.data>
  ...
</configuration>

Вы можете получить правильный элемент конфигурации для SQLite из вашего machine.config на компьютере с правильно установленным драйвером, просмотрев:

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config

Также обратите внимание, что я включил элемент "clear" в мою конфигурацию выше, потому что, если бы DbProviderFactory уже был зарегистрирован на machine.config, он бы выдал исключение. Поэтому я очищаю их все и просто добавляю те, которые нужны моему приложению. Вы можете опустить элемент "clear", если вы уверены, что на машинах не будет установлен драйвер БД.

Вам просто нужно развернуть System.Data.SQLite.dll вместе с вашей заявкой. Просто поместите его в тот же файл, что и ваш исполняемый файл, и.NET должен найти его автоматически. Вы также можете попробовать вставить его в свой исполняемый файл.

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