2010-07-16 3 views
1

J'ai récemment reçu un PC fonctionnant sous Windows 7 pour un développement futur car ce sera plus proche de notre environnement de production. J'étais en train de travailler sur une solution sur mon ancienne machine (Windows XP 32 bits), mais j'ai décidé de commencer à travailler dessus avec la nouvelle boîte pour essayer de résoudre tous les problèmes. J'ai Visual Studio 2008 installé sur les deux boîtes.Points d'achoppement en passant de 32 à 64 bits

La solution sur laquelle je travaille utilise NServiceBus dont 32 bit. Les pilotes Oracle installés sur la boîte de dev sont 64 bits et cela m'a causé beaucoup de problèmes. Je reçois des erreurs d'exécution que NserviceBus ne peut pas charger la DLL oracle 64 bits. J'ai essayé toutes les combinaisons possibles de Solution Platform et de Target Platform. J'ai réussi à le faire fonctionner correctement il y a environ une semaine, mais depuis, je n'ai plus rien changé et j'ai rechargé une étagère et je ne peux plus le faire fonctionner.

Je suis à la recherche de quelques conseils généraux, conseils et astuces pour travailler dans cet environnement mixte. Dois-je revenir en arrière et définir des projets à construire en 32 bits si un projet qui les référence utilise un assemblage 32 bits? Etc. Merci pour toute aide.

+2

Assez difficile à lire. Vous pourriez vouloir utiliser des paragraphes pour nous aider à trier votre flux de conscience fluide. Nous aimons vraiment que le contexte et la question soient clairement identifiés afin que nous n'ayons pas à nous demander ce que vous demandez. –

+0

Question la plus importante: le programme/dll est-il géré (ex: C#) ou unmanage (ex: C++ natif)? –

+0

Géré, j'utilise C# –

Répondre

1

C'est un problème que j'ai rencontré avec la plate-forme ASCOM (Astronomy Common Object Model). Fondamentalement, s'il y a une seule dépendance de 32 bits, alors tout le code doit être de 32 bits. Dans notre cas, nous ne possédons pas nécessairement l'application cliente, donc nous ne pouvons pas contrôler si ce sera 32 ou 64 bits, donc nous avons dû supprimer rigoureusement toutes les dépendances 32 bits de notre code et compiler tout pour 'Any CPU'.

alt text http://community.tigranetworks.co.uk/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/tim_5F00_long/1373.image_5F00_7A568AC3.png

Certaines des idées que nous visitions dans ASCOM sont documentés sur mon blog, Electric Dreams.

+0

Merci, l'info dans le lien aide beaucoup. –

2

Vous devez être homogène au format DLL et exécutable - si vous avez 32 bits, tout doit être 32 bits. Si on est en 64bit, tout doit être en 64bit. La seule exception est le code managé: s'il est défini sur "Any CPU", il peut être chargé par un processus 32 ou 64 bits.

+0

le code managé n'est pas une exception, c'est plus comme le chat de Schrödinger. –

2

Les codes 32 et 64 bits ne peuvent pas exister tous les deux dans le même processus. Si vous devez utiliser une DLL 32 bits à partir d'un programme 64 bits (ou vice-versa), vous devrez générer un nouveau processus et utiliser une technique de communication inter-processus (IPC).