2010-02-14 8 views
6

Je développe une application Windows Forms à l'aide de Visual Studio 2008 C# qui utilise une base de données SQL Server Compact 3.5 sur le client. Le client sera probablement Windows 32 bits   XP ou Windows   Vista. J'utilise un projet Windows Installer standard qui crée un fichier MSI et setup.exe pour installer l'application sur un ordinateur client. Je suis nouveau à SQL Server Compact, donc je n'ai pas eu à distribuer une base de données client comme ça avant maintenant. Quand je lance le setup.exe (sur le nouveau Windows XP 32 bits avec SP2 et Internet   Explorateur   7), il installe très bien, mais quand je lance l'application que je reçois cette erreur:Erreur SQL Server Compact: Impossible de charger la DLL 'sqlceme35.dll'. Le module spécifié est introuvable

Unable to load DLL 'sqlceme35.dll'. The specified module could not be found

J'ai passé quelques heures Je cherchais déjà cette erreur, mais tout ce que je pouvais trouver étaient des problèmes liés à l'installation sur Windows 64 bits et aucun problème lié à l'utilisation normale de 32 bits.

L'application d'installation copie tous les fichiers dépendants qu'elle a trouvés dans le répertoire d'installation spécifié, y compris le fichier System.Data.SqlServerCe.dll (assembly version 3.5.1.0). Le fichier de base de données est dans un répertoire appelé « données » hors du répertoire de l'application, et la chaîne de connexion car il est

<add name="Tickets.ieOutlet.Properties.Settings.TicketsLocalConnectionString"   connectionString="Data Source=|DataDirectory|\data\TicketsLocal.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" /> 

Quelques questions que j'ai:

  • la demande devrait être en mesure de trouver la DLL fichier s'il se trouve dans le même répertoire, c'est-à-dire local à l'application, ou dois-je l'installer dans le GAC? (Si oui, puis-je utiliser Windows Installer pour installer un fichier DLL dans le GAC?)
  • Y at-il autre chose que je dois distribuer avec l'application afin d'utiliser une base de données SQL Server Compact?
  • Il existe également d'autres fichiers DLL, tels que MS Interop pour exporter des données vers Excel sur le client. Doivent-ils être installés dans le GAC ou les localiser dans le répertoire de l'application suffit-il?

Répondre

6

Vous n'avez pas besoin d'être dans le GAC pour que SQL Server Compact s'exécute et il les récupère dans le répertoire de l'application. Il existe plusieurs façons de déployer un projet SQL Server Compact.Les deux principaux moyens sont les suivants:

  1. Déploiement du SQL Server installer Compact redistribuable avec votre projet, mais cette façon est douloureuse et peut également être unistalled par l'utilisateur final, ou mis à niveau par des mises à jour de Windows et de briser votre application.

  2. Y compris les fichiers DLL dans le dossier de votre application. Selon les fonctionnalités de SQL Server Compact que vous utilisez (réplication ou autre), il existe une poignée de fichiers DLL à déployer dans votre dossier d'application.

Si vous avez SQL Server Compact installé sur votre ordinateur, ils sont très probablement situé à "C: \ Program Files \ Microsoft SQL Server Compact Edition \ v3.5". Ils peuvent être ajoutés au projet dans Visual Studio, puis définissez leur type de sortie de projet sur "Toujours copier". Et la référence principale à System.Data.SqlServerCe que vous avez dans vos références de projet doit avoir copie locale définie sur true.

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

Si vous avez ces tous définir, puis dans votre projet d'installation tout ce que vous devez inclure est la sortie du projet de ce projet et y Ouais bien. À mon avis, c'est la seule façon d'y aller. Il s'agit d'un déploiement simple, de quelques fichiers et vous contrôlez les versions de DLL utilisées par votre application.

J'espère que cela aide.

+0

Salut merci pour cela. Après les premières réponses ci-dessus j'ai passé quelques jours à regarder ClickOnce, mais je suis maintenant de retour à une solution MSI comme ClickOnce ne fonctionne pas très bien lors de la distribution d'une base de données compacte avec une application. Je n'ai pas résolu le problème d'origine mais j'ai essayé d'inclure le fichier .dlls. J'ai eu le sqlceme35.dll dans le répertoire de l'application la première fois, mais j'ai toujours l'erreur, donc je ne sais pas si l'erreur sera toujours là. –

+0

Oui, j'espère que ça marchera. Nous avons une application client intelligente au niveau de l'entreprise déployée via click une fois et avec une base de données compacte sql embarquée avec des milliers d'utilisateurs finaux, et jusqu'à présent, cette solution nous a semblé la meilleure pour le déploiement et les mises à jour automatiques. –

+0

En fait ça sonnait juste une cloche (ou devrais-je dire que ça cliquait quand vous avez dit que ... ohhh), je n'avais pas réalisé que vous déployiez via click une fois.Vérifiez également dans votre clic une fois les paramètres du projet si vous cliquez sur l'onglet Publier/Fichiers d'application et ensuite inclure la DLL SQL, ils seront déployés correctement, vous devrez peut-être vérifier tout afficher pour les voir. –

2

J'ai eu un problème similaire, un Visual   studio   2008 application Windows ciblage 32 bits de Windows   XP et Windows   Vista utilisé SQL Server Compact 3.5 SP1 - qui a ensuite obtenu cette erreur lorsqu'il est installé sur 64 bits Windows 7 :

Unable to load DLL 'sqlceme35.dll'. The specified module could not be found

J'ai intégré un MSI pour SQL Server Compact dans le programme d'installation de l'application. Suite à ce discussion on MSDN plutôt confus a révélé que j'avais besoin d'utiliser le MSI 64 bits pour SQL Server Compact sur les machines 64 bits. D'oh! C'est-à-dire, à partir de la page Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop J'avais besoin de SSCERuntime-ENU-x64.msi plutôt que de SSCERuntime-ENU-x86.msi pour les machines 64 bits.

Questions connexes