Eventuali duplicati:
Loading x86 or x64 assembly.NET collega libreria specifica piattaforma
sto cercando di compilare qualsiasi progetto di CPU NET, ma devo collegare libreria SQLite, che ha versioni differenti per piattaforme x86 e x64. Cambiare solo le versioni DLL per x64 non aiuta, l'applicazione non si avvia, ho bisogno di ricompilare il codice usando il riferimento x64. Quando aggiungo entrambi i riferimenti x86 e x64 non riesce a compilare, a causa di conflitti. Non riesco a compilare l'applicazione usando x86, perché una delle librerie COM di sistema che sto utilizzando non funziona con WOW64.
All 32-bit VSS applications (requesters, providers, and writers) must run as native 32-bit or 64-bit applications. Running them under WOW64 is not supported
quindi ho bisogno di costruire qualsiasi progetto di CPU, ma l'unica soluzione a questo problema che vedo in questo momento sta avendo progetti duplicati per x86 e x64. C'è qualcosa di meglio?
UPDATE
Quando mi riferisco librerie x64 in progetto, ma provo a caricare le librerie x86 ottengo la seguente eccezione.
The located assembly's manifest definition does not match the assembly reference.
Grazie. Ho visto messaggi del genere, ma il problema sta cambiando la DLL solo non aiuta molto. Non funziona ancora quando copio DLL a 64 bit nella mia cartella, ho ancora bisogno di ricompilare l'applicazione facendo riferimento a quelle librerie a 64 bit. Sto facendo qualcosa di sbagliato? E anche io non capisco quale versione dovrei fare riferimento? – axe
Sì. Le librerie native devono avere nomi identici, ma devono trovarsi in cartelle diverse (come le sottocartelle della tua app). In fase di runtime si chiama 'SetDllDirectory' per far sì che il sistema operativo guardi nella cartella corretta a seconda del bitness. Oppure usa l'evento 'AppDomain.CurrentDomain.AssemblyResolve' come [suggerito da Rover] (http://stackoverflow.com/questions/3787428/loading-x86-or-x64-assembly#comment7029800_6060754). Non si fa riferimento direttamente a tali librerie, lo fa il wrapper gestito SQLite. Il tuo codice farà in modo che il wrapper carichi la versione corretta della libreria nativa sottostante. – GSerg
Ho provato ancora una volta, non funziona per me. L'applicazione si arresta in modo anomalo all'avvio. Il problema è che sto facendo riferimento alle librerie x64 nel progetto, ma seleziono le librerie x86 in fase di esecuzione. Se costruisco la mia applicazione usando le librerie x86 funziona perfettamente su x86 windows, altrimenti non funziona. – axe