2010-11-04 21 views
5

Nous avons une grande solution comprenant de nombreuses bibliothèques différentes. Nous venons de migrer vers le développement sur un système 64 bits et cela nous amène à réfléchir à la cible de la plate-forme que nous devons spécifier pour chaque projet individuel dans la solution.C# Solution, tous les projets peuvent-ils cibler AnyCPU sauf un qui doit être x86?

À l'heure actuelle, nous avons seulement un projet de bibliothèque qui fait référence à un fichier DLL 32 bits. Nous référençons un Interop de ce fichier DLL mais nous recevons une erreur lors du ciblage de x86 en tant que plate-forme pour ce projet tout en laissant les projets restants dans la solution comme "Any CPU".

Ma question est, pouvons-nous cibler un processeur sur tous nos projets à l'exception de celui qui fait référence à l'interopérabilité 32 bits? Ou devrait être juste construire tout pour x86 car cela semble fonctionner sans erreur.

Répondre

3

Oui.

Toutes les DLL sauf une peuvent être AnyCPU. Assurez-vous de faire le processus x86, et toutes les DLL vont charger comme 32 bits.

Quelle est l'erreur que vous obtenez? L'ajout du message d'erreur aboutirait probablement à des réponses plus utiles.

+0

nous développons sur une machine 64 bits. Lorsque nous visons "Any CPU" pour tous les projets, à l'exception de la bibliothèque qui nécessite une référence à la DLL 32 bits, cela ne fonctionne pas. Nous recevons un message d'erreur "Récupération de la fabrique de classe COM pour le composant avec CLSID {numéros} a échoué – Horges

+0

Ah, oui, alors cela ne fonctionnera pas.Il devrait fonctionner si vous changez seulement le projet EXE en x86 – codekaizen

+0

Oui, cela fonctionne Nous mettons seulement l'application principale à X86 et le reste peut rester comme AnyCPU Quand (et si nous pouvons) nous obtenons une nouvelle DLL qui prend en charge 64 bits tout ce que nous devrons faire est de changer la plate-forme cible pour l'application principale. Merci codekaizen – Horges

1

Je pense que si tous vos dll sont anyCpu, votre .exe peut être x64 ou x86. Mais, si votre exe est x64 ou x86 vos fichiers .dll ne peuvent pas être l'autre. De plus, si votre .exe est AnyCPU, je crois qu'il chargera dans n'importe quel mode est natif à la machine. Ce qui signifie que votre DLL a été soit anyCpu ou le mode natif pour votre système.