2010-02-14 52 views
6

Estoy desarrollando una aplicación Windows Forms usando Visual Studio 2008 C# que usa una base de datos SQL Server Compact 3.5 en el cliente. El cliente probablemente sea 32 bit Windows   XP o Windows   máquinas Vista. Estoy usando un proyecto estándar de Windows Installer que crea un archivo MSI y setup.exe para instalar la aplicación en una máquina cliente. Soy nuevo en SQL Server Compact, así que no he tenido que distribuir una base de datos de clientes como esta antes de ahora. Cuando ejecuto el setup.exe (en el nuevo 32 bits Windows XP con SP2 e Internet Explorador     7) se instala bien, pero cuando corro la aplicación consigo este error:Error SQL Server Compact: no se puede cargar DLL 'sqlceme35.dll'. El módulo especificado no se pudo encontrar

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

pasé un par de horas buscando este error ya, pero todo lo que pude encontrar fueron problemas relacionados con la instalación en Windows de 64 bits y ninguno relacionado con los 32 bits normales que estoy usando.

La aplicación de instalación copia todos los archivos dependientes que encontró en el directorio de instalación especificado, incluido el archivo System.Data.SqlServerCe.dll (versión de ensamblaje 3.5.1.0). El archivo de base de datos está en un directorio llamado 'datos' fuera el directorio de la aplicación, y la cadena de conexión para ello es

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

Algunas de las preguntas que tengo:

  • En caso de que la aplicación será capaz de encontrar el archivo DLL archivo si está en el mismo directorio, es decir, local para la aplicación, o ¿necesito instalarlo en el GAC? (De ser así, ¿puedo usar Windows Installer para instalar un archivo DLL en el GAC?)
  • ¿Hay algo más que necesite distribuir con la aplicación para utilizar una base de datos SQL Server Compact?
  • También hay otros archivos DLL, como MS interoperabilidad para exportar datos a Excel en el cliente. ¿Es necesario instalarlos en el GAC o bastará con ubicarlos en el directorio de la aplicación?

Respuesta

6

No necesita que esté en el GAC para que se ejecute SQL Server Compact, y lo recogerá del directorio de la aplicación. Hay varias formas de implementar un proyecto de SQL Server Compact.Las dos formas principales son:

  1. Implementación del SQL Server instalador redistribuible compacto con su proyecto, pero de esta manera es doloroso y también pueden ser unistalled por el usuario final, o actualizados por las actualizaciones de Windows y la fractura de su aplicación.

  2. Incluyendo los archivos DLL en la carpeta de la aplicación. Dependiendo de las características de SQL Server Compact que esté utilizando (replicación o lo que sea), hay un puñado de archivos DLL para implementar en la carpeta de la aplicación.

Si tiene SQL Server Compact instalado en su máquina, lo más probable se encuentra en "C: \ Archivos de programa \ Microsoft SQL Server Compact Edition \ v3.5". Se pueden agregar al proyecto en Visual Studio y luego establecer su tipo de salida de proyecto para "copiar siempre". Y la referencia principal a System.Data.SqlServerCe que tiene en las referencias de su proyecto debe tener copiar local establecido en verdadero.

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

Si usted tiene estos todos establecer, luego en su proyecto de instalador todo lo que tiene que incluir es el resultado del proyecto de este proyecto y eres bueno. En mi opinión, este es el único camino a seguir. Es una implementación simple, de un par de archivos y usted tiene el control de las versiones DLL que usa su aplicación.

Espero que ayude.

+0

Hola gracias por eso. Después de las primeras respuestas, pasé un par de días mirando ClickOnce, pero ahora vuelvo a una solución MSI, ya que ClickOnce no funciona muy bien cuando se distribuye una base de datos compacta con una aplicación. No resolví el problema original que tenía, pero intentaré incluir los .dll. Tuve el sqlceme35.dll en el directorio de la aplicación la primera vez, pero todavía recibí el error, por lo que no estoy seguro si el error seguirá allí. –

+0

Sí, espero que funcione. Tenemos una aplicación de cliente inteligente a nivel empresarial implementada mediante clic una vez y con una base de datos compacta sql compact con miles de usuarios finales, y hasta ahora esta solución parecía funcionar mejor para nosotros en cuanto a la implementación sencilla y las actualizaciones automáticas de la aplicación. –

+0

En realidad, sonó una campana (o debería decir que hizo clic una vez que dijiste eso ... ohhh), no me di cuenta de que se estaba desplegando a través del clic una vez.También verifique en su clic las configuraciones del proyecto una vez que haga clic en la pestaña de publicación/Archivos de la aplicación y luego incluya las dll de sql que se desplegarán correctamente, es posible que deba verificar mostrar todo para verlas. –

2

tuve un problema similar, un Visual   Estudio   2008 aplicación de Windows de orientación de 32 bits de Windows   XP y Windows   Vista que utiliza SQL Server Compact 3.5 SP1 - que luego obtuvo este error cuando se instala en Windows de 64 bits 7 :

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

Estaba integrando un MSI para SQL Server Compact en el instalador de la aplicación.

Después de este confuso discussion on MSDN revelé que necesitaba usar el MSI de 64 bits para SQL Server Compact en máquinas de 64 bits. D'oh! Es decir, desde la página Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services for ADO.NET version 1.0 Service Pack 1 for Windows Desktop Necesitaba SSCERuntime-ENU-x64.msi en lugar de SSCERuntime-ENU-x86.msi para máquinas de 64 bits.

Cuestiones relacionadas