2009-06-01 35 views
10

Estoy trabajando en un sistema para usar un SqlServerCe con NHibernate. Desde mi programa de controlador, si agrego el ensamblado System.Data.SqlServerCe como referencia, puedo crear y ejecutar consultas contra una base de datos sin problemas. Al intentar utilizar NHibernate, sin embargo, tengo la siguiente excepción:No se pudo cargar el archivo o el ensamblaje

Una primera excepción del tipo 'System.IO.FileNotFoundException' en mscorlib.dll Información adicional: No se pudo cargar el archivo o ensamblado 'del sistema. Data.SqlServerCe 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado.

He rastreado la excepción a una llamada a Assembly.Load ("System.Data.SqlServerCe"), que parece que debería funcionar. El ensamblado System.Data.SqlServerCe está en el GAC (también intenté agregarlo como referencia local con CopyLocal = true, en vano), y puedo usar bien sus miembros, así que ¿por qué no puedo cargarlo explícitamente? ¿eso? Cuando abro el ensamblado en Reflector, tiene problemas para cargar la referencia de System.Transactions (también intenté agregarlo como referencia local, de nuevo en vano), por lo que cargar ese ensamblaje podría ser el problema, en lugar del sistema. Conjunto Data.SqlServerCe.

¿Es este un problema común? Configuración incorrecta del sistema, tal vez?

+0

Parece que nunca escuchó sobre Fusion: http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx – zvolkov

+0

Ooh, herramienta ordenada. La respuesta que me da es: REGISTRO: El mismo enlace se vio antes, y se ha fallado con hr = 0x80070002. ERR: Se produjo un error irrecuperable durante la verificación previa a la descarga (hr = 0x80070002). ¿Qué no parece tan útil? ¿Ha fallado antes, así que vamos a fallar de nuevo? Necesito leer sobre los documentos de fusión para poder resolver esto un poco mejor. Me señalaron una solución a mi problema, sin embargo - detalles a continuación. – Dathan

Respuesta

8

Aparentemente, esto se puede resolver agregando un elemento <qualifiedAssembly> al archivo app.config. Agregar lo siguiente tiene mi aplicación funcionando sin problemas:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
    </assemblyBinding> 
</runtime> 

Gracias!

+0

Sí, el FullName referido anteriormente es de hecho el nombre completo del ensamblaje. Le da al CLR la información que necesita para encontrar y cargar el ensamblaje específico. También puede sustituir ese fullName en una cadena de conexión en un archivo .config (en lugar del nombre parcial) – nocache

1

Tuve un problema similar. El error que estaba cometiendo era que estaba intentando ejecutar el presente .exe en el ../obj/x86/Release, mientras que se supone que debo ejecutar el presente .exe en ../bin/Release. (Soy absolutamente novato en C#).

(también me di cuenta de que en este directorio ../bin/Release, el archivo .dll que se hace referencia se copia localmente.)

2

esto es muy probablemente conectado a algún sistema (mal) de configuración.

Sin embargo, por diseño SQL Server CE es solo una DLL, que se puede enviar junto con su producto.
Esto significa que puede simplemente configurar Copy local en True en las propiedades de referencia de System.Data.SqlServerCe, y listo.

+0

¡Funcionó perfectamente para mí! Gracias. –

Cuestiones relacionadas