Разверните приложение 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 должен найти его автоматически. Вы также можете попробовать вставить его в свой исполняемый файл.