2010-06-24 3 views
2

Mon programme (une application console) fait référence à plusieurs autres assemblys (de nombreuses bibliothèques open-source). J'ai construit l'ensemble avec l'ensemble d'options "Any CPU" (en utilisant VS2008). Lorsque je démarre l'assembly à partir d'une invite de commande 64 bits sur une machine Windows Server 2008 x64, le processus démarre toujours en tant que processus 32 bits!Assemblage construit en x86 Exécution de l'assemblage entier en exécution 32 bits

J'ai regardé mes références et il me semble que j'ai une référence pour un assemblage 32 bits référencé. Cette référence unique peut-elle provoquer le démarrage de l'ensemble en tant que 32 bits?

En outre, j'utilise ILMerge pour fusionner tous les assemblys référencés en un seul assemblage. Peut-être que ceci a quelque chose à y voir?

Quelqu'un pourrait-il m'aider à comprendre ce qui se passe ici?

Répondre

6

Si vous devez charger un ensemble 32 bits, le processus entier doit être 32 bits. Vous pouvez cibler "Any CPU" pour votre application principale, mais ensuite il fonctionnera en 64 bits, et échouera au moment de l'exécution lorsqu'il essayera de charger l'assembly 32 bits. ILMerge est assez intelligent pour basculer l'ensemble d'entrée principal de AnyCPU vers x86 si vous avez un assemblage x86 dans le cadre de votre fusion, pour éviter que cela ne pose un problème.

Si vous voulez exécuter 64 bits, vous devez avoir tous les assemblages 64 bits ou AnyCPU.

+0

Excellent. Merci! –

0

Oui, c'est probablement votre problème. Je reconstruirais l'assemblée comme "n'importe quel CPU".

+0

J'ai effectivement construit l'assemblage de cette façon. L'un des assemblys référencés est de type 32 bits uniquement. Je suppose que quand ILMerge tout ILMerge reconnaît l'ensemble unique de 32 bits et définit le tout 32 bits? –

+1

@Jeffrey: Oui. Cependant, si vous avez une dépendance sur un assembly 32 bits, vous serez forcé d'exécuter 32 bits - vous ne pouvez pas charger un assembly 32 bits dans un processus 64 bits. –

Questions connexes