2012-02-27 6 views
11

Ho una libreria C# che viene chiamata da vari client (sia a 32 bit che a 64 bit). Fino ad ora è stato compilato come AnyCPU, quindi non ci sono stati problemi.Come distribuire entrambe le versioni a 32 e 64 bit della libreria

Recentemente ho aggiunto una dipendenza alla libreria SQLite .NET, disponibile in versioni a 32 e 64 bit (ma non AnyCPU). Quindi, ora, devo avere 2 build - per entrambi i testimoni.

In passato, ho visto altre librerie (MS SQL Compact viene in mente) che ha avuto uno schema in cui un unico assembly .NET avrebbe Private\amd64 e Private\x86 cartelle nelle cartelle con le appropriate librerie native in loro ed è chiamerei ciascuno se necessario.

Questo approccio è fattibile per la mia situazione? C'è documentazione su come implementarlo? Sono necessarie modifiche al codice o si tratta di una tecnica di distribuzione?

risposta

6

Ci sono diversi modi per gestire questa situazione. Le modifiche al codice (piccole) sono necessarie per i primi tre approcci:

A. È possibile modificare il PERCORSO in modo che punti alla cartella specifica della piattaforma durante l'avvio dell'applicazione. Quindi .NET caricherà automaticamente DLL locali da quella cartella.

B. È possibile sottoscrivere l'evento AssemblyResolve e quindi scegliere l'assembly in base alla piattaforma.

Controlla il post del blog di Scott Bilias su questo http://scottbilas.com/blog/automatically-choose-32-or-64-bit-mixed-mode-dlls/. Nota che finisce per preferire l'approccio A.

"In poche parole, la soluzione è ingannare il caricatore! Riferimento a p4dn.dll che non esiste, e utilizzare l'evento AssemblyResolve per intercettare il carico e reindirizzare verso il corretto assemblaggio della dimensione del bit. "

C. Utilizzare un set specifico della piattaforma di exe.configs e l'elemento codebase per determinare le posizioni dell'assembly. La tua installazione installerebbe quella corretta in base alla piattaforma.

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

D. scrivere due messe a punto una per 32 bit e una per 64 bit, quindi installare solo i file appropriati per la piattaforma.