Проблема развертывания SQL CE 3.5, касающаяся взаимодействия между C # и C ++ - PullRequest
1 голос
/ 27 октября 2008

У нас есть ситуация, когда приложение C # работает с SQL CE 3.5. Чтобы позволить унаследованной программе использовать некоторые из ее функций, мы создали DLL C ++, которая использует взаимодействие для извлечения необходимой информации из программы C #. Чтобы это работало, C # -программе нужен доступ к базе данных. Это не очень сложный сценарий.

При попытке развертывания с частной установкой возникают некоторые проблемы. Нет проблем с программой на C #, она может обращаться к базе данных и работать с ней без проблем.

Но при попытке доступа к функциям в C # -программе через взаимодействие C ++, которое заставляет C # -программу получить доступ к базе данных, мы получаем аварийное завершение с исключением: «... Provider: System. Data.SqlServerCe.3.5 не установлен ".

Это очевидно, потому что мы не можем добавить файл App.config к исполняемой программе.

Как мы можем обойти это? Есть ли другой способ исправить это? О любых других формах установки SQL CE 3.5 не может быть и речи. Поэтому мы должны заставить это работать.

С уважением,

P

Edit:

Я работаю не против SQL CE напрямую, а через Linq2SQL. Я пытался добавить файлы конфигурации ко всем моим DLL, это не помогает. Кажется, имеет значение только, если исполняемый файл получил app.config.

Возникло исключение: провайдер System.Data.SqlServerCe.3.5 не установлен.

И последняя функция, вызываемая в соответствии с трассировкой стека: System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize (...).

Редактировать 2

Я добавил все файлы, необходимые для развертывания. Как я писал выше, это работает, если я использую программу dll (которая использует Linq 2 Sql) через исполняемый файл .net с файлом app.config, который указывает, где искать dll SQL CE 3.5. Развертывание будет не работать только с файлами, необходим файл app.config.

Проблема заключается в том, что мы должны использовать файл dll через исполняемый файл C ++, который не может сообщить .net, где искать DLL-файл Sql Ce 3.5.

Ответы [ 5 ]

1 голос
/ 28 октября 2008

добавьте следующие файлы в папку вашего приложения:

  • sqlceca35.dll
  • sqlcecompact35.dll
  • sqlceer35E.dll
  • sqlceme35.dll
  • sqlceoledb35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll

тогда будет работать.

, что необходимо, если вы не установили sql server ce 3.5 прямо на целевой машине (как мне кажется, в большинстве случаев).

0 голосов
/ 27 ноября 2009

Не используйте LINQ, но используйте SqlCeConnection, SqlCeCommand и т. Д. Для методов, которые вы вызываете из вашей программы на C ++

0 голосов
/ 20 ноября 2008

Я также видел случай, когда System.Data.SqlServerCe.dll в GAC была неправильной версией файла, и мне пришлось заменить dll в GAC из командной строки cmd.

Пункт о том, что файлы должны быть в папке, верен - если GAC не запутается, имея несколько версий

0 голосов
/ 06 ноября 2008

Это очевидно, потому что мы не можем добавить файл App.config к исполняемой программе.

Почему бы и нет? Итак, Visual Studio не будет автоматически собирать файл конфигурации, переименовывать его и перемещать в выходной каталог, но вы пробовали файл .exe.config вместе с приложением C ++?

0 голосов
/ 28 октября 2008

Вы можете добавить файл foo.dll.config и убедиться, что он находится рядом с DLL. Вам просто нужно убедиться, что у вас есть код в вашей DLL, чтобы определить, где он находится на диске, и прочитать конфигурацию из того же места.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...