Я разрабатываю приложение Windows Forms с использованием Visual Studio 2008 C #, которое использует клиентскую базу данных SQL Server Compact 3.5. Скорее всего, клиент будет 32-битной Windows XP или Windows Vista. Я использую стандартный проект установщика Windows, который создает файл MSI и setup.exe для установки приложения на клиентский компьютер. Я новичок в SQL Server Compact, поэтому раньше мне не приходилось так распределять клиентскую базу данных. Когда я запускаю файл setup.exe (на новой 32-битной Windows XP с пакетом обновления 2 (SP2) и Internet Explorer 7), он устанавливается нормально, но когда я запускаю приложение, я получаю эту ошибку:
Невозможно загрузить DLL 'sqlceme35.dll'. Указанный модуль не найден
Я потратил несколько часов на поиск этой ошибки, но все, что я мог найти, это проблемы, связанные с установкой в 64-битной Windows, и ни одной, связанной с обычной 32-битной версией, которую я использую.
Приложение установки копирует все зависимые файлы, которые оно нашло, в указанный каталог установки, включая файл System.Data.SqlServerCe.dll
(версия сборки 3.5.1.0). Файл базы данных находится в каталоге с именем «data» вне каталога приложения, и строка подключения для него -
<add name="Tickets.ieOutlet.Properties.Settings.TicketsLocalConnectionString" connectionString="Data Source=|DataDirectory|\data\TicketsLocal.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" />
У меня есть несколько вопросов:
- Должно ли приложение быть в состоянии найти файл DLL, если он находится в том же каталоге, то есть локально для приложения, или мне нужно установить его в GAC ? (Если это так, могу ли я использовать установщик Windows для установки файла DLL в GAC?)
- Что-нибудь еще нужно распространять вместе с приложением, чтобы использовать базу данных SQL Server Compact?
- Существуют и другие DLL-файлы, такие как MS interop для экспорта данных в Excel на клиенте. Нужно ли их устанавливать в GAC или будет достаточно их размещения в каталоге приложения?