Ошибка SQL Server Compact: невозможно загрузить DLL 'sqlceme35.dll'. Указанный модуль не может быть найден - PullRequest
6 голосов
/ 15 февраля 2010

Я разрабатываю приложение 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 или будет достаточно их размещения в каталоге приложения?

Ответы [ 4 ]

6 голосов
/ 17 февраля 2010

Вам не нужно, чтобы он был в GAC для запуска SQL Server Compact, и он выберет их из каталога приложения. Существует несколько способов развертывания проекта SQL Server Compact. Два основных способа:

  1. Развертывание распространяемого установщика SQL Server Compact вместе с вашим проектом, но этот способ является болезненным, и его также может не остановить конечный пользователь или он будет обновлен обновлениями Windows и нарушит работу вашего приложения.

  2. Включение файлов DLL в папку вашего приложения. В зависимости от того, какие функции SQL Server Compact вы используете (репликация и т. Д.), В вашей папке приложения может быть развернуто несколько файлов DLL.

Если на вашем компьютере установлен SQL Server Compact, он, скорее всего, находится по адресу «C: \ Program Files \ Microsoft SQL Server Compact Edition \ v3.5». Их можно добавить в проект в Visual Studio, а затем установить тип вывода проекта «всегда копировать». А для основной ссылки на System.Data.SqlServerCe, которую вы используете в ссылках на проект, должно быть copy local , установленной в true.

  • sqlceca35.dll
  • sqlcecompact35.dll
  • sqlceer35en.dll
  • sqlceoledb35.dll
  • sqlceqp35.dll
  • sqlcese35.dll

Если у вас все это установлено, то в вашем проекте установщика все, что вам нужно включить, - это выход проекта этого проекта, и вы в порядке. На мой взгляд, это единственный путь. Это простое развертывание, состоящее из пары файлов, и вы контролируете, какие версии DLL использует ваше приложение.

Надеюсь, это поможет.

2 голосов
/ 10 января 2011

У меня была похожая проблема: приложение Visual Studio 2008 для Windows, предназначенное для 32-разрядных версий Windows XP и Windows Vista, в котором использовался SQL Server Compact 3.5 с пакетом обновления 1 (SP1), которое затем получало эту ошибку при установке в 64-разрядной версии Windows 7:

Невозможно загрузить DLL 'sqlceme35.dll'. Указанный модуль не найден

Я встраивал MSI для SQL Server Compact в установщик приложения.

После этого довольно запутанного обсуждения по MSDN выяснилось, что мне нужно использовать 64-разрядный MSI для SQL Server Compact на 64-разрядных компьютерах. D'о! То есть со страницы Microsoft SQL Server Compact 3.5 с пакетом обновления 1 (SP1) и служб синхронизации для ADO.NET версии 1.0 с пакетом обновления 1 (SP1) для рабочего стола Windows Мне нужно было SSCERuntime-ENU-x64.msi вместо SSCERuntime-ENU-x86.msi для 64-битных машин.

1 голос
/ 15 февраля 2010
1 голос
/ 15 февраля 2010

Как: развернуть базу данных SQL Server Compact Edition с приложением должно помочь, по крайней мере, с вашими первыми двумя вопросами.

В общем, я думаю, вам не следует устанавливать что-либо в GAC для одного приложения.

...