2012-02-27 20 views
11

Tengo una biblioteca C# a la que llaman varios clientes (tanto de 32 bits como de 64 bits). Hasta ahora se compiló como AnyCPU, por lo que no hubo problemas.Cómo distribuir las versiones de 32 y 64 bits de la biblioteca

Recientemente agregué una dependencia a la biblioteca SQLite .NET que vienen en sabores de 32 y 64 bits (pero no en AnyCPU). Entonces, ahora, tengo que tener 2 compilaciones para ambas biturezas.

En el pasado, he visto otras bibliotecas (me viene a la mente MS SQL Compact) que tenían un esquema donde un ensamblado .NET solo tenía Private\amd64 y Private\x86 carpetas en las carpetas con las bibliotecas nativas apropiadas en ellas y Llamaría a cada uno según sea necesario.

¿Este enfoque es viable para mi situación? ¿Hay documentación sobre cómo implementarlo? ¿Se requieren cambios de código o se trata de una técnica de distribución?

Respuesta

6

Hay varias maneras en que puede manejar esto. Se requieren cambios de código (pequeños) para los tres primeros enfoques:

A. Puede modificar la RUTA para apuntar a la carpeta específica de la plataforma durante el inicio de la aplicación. Entonces, .NET cargará automáticamente las DLL locales de esa carpeta.

B. Puede suscribirse al evento AssemblyResolve y luego elegir el ensamblaje según la plataforma.

Echa un vistazo a la publicación del blog de Scott Bilias en este http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls/. Tenga en cuenta que termina prefiriendo el enfoque A.

"En pocas palabras, la solución es engañar al cargador! Haga referencia a un p4dn.dll que no existe, y use el evento AssemblyResolve para interceptar la carga y redirigirla al montaje correcto del tamaño de bit ".

C. Use un conjunto específico de plataforma de exe.configs y el elemento de base de código para determinar las ubicaciones de ensamblaje. Su configuración instalaría la correcta según la plataforma.

http://msdn.microsoft.com/en-us/library/4191fzwb.aspx

D. Escribir dos configuraciones, una para 32 bits y otra para 64 bits, entonces sólo instalar los archivos correspondientes para la plataforma.

Cuestiones relacionadas