Разверните приложение Windows без установки Sqlite .net провайдера - PullRequest
0 голосов
/ 10 июля 2011

Я использую 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 ]

3 голосов
/ 14 июля 2011

Помимо копирования драйвера БД .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» можно опустить, если вы уверены, что на машинах не установлен драйвер БД.

0 голосов
/ 10 июля 2011

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

...