2009-03-03 9 views
1

J'ai un projet .NET qui a toujours été construit/exécuté par/sur des machines 32 bits. J'ai eu un nouvel ordinateur 64 bits et j'essaie d'aborder la tâche de l'obtenir fonctionnant là. Le script de construction est en nant, et à un moment donné, nous compilons du code boo en utilisant la tâche nant. Le code boo fait référence à notre DLL principale, qui est construite à partir de source C# plus tôt dans le processus de construction.Nant, Booc et x64

J'ai essayé deux choses: le construire pour fonctionner en mode 32 bits et le construire pour fonctionner en mode 64 bits. En utilisant corflags sur plusieurs programmes (y compris booc), j'ai été en mesure de construire le projet construit en mode 32 bits, mais a fini avec un tas de problèmes en aval à l'exécution. J'ai donc besoin de le faire en mode 64 bits, ce que je pense préférable de toute façon. Selon le code source de nant/booc, la tâche booc nant appelle le processus booc.exe en cours en utilisant la classe Process du CLR, donc (je pense) il devrait hériter de 32bitness ou 64bitness du processus parent. Cela ne reflète pas ce que je vois, cependant.

Voici ce que je l'ai fait:

  1. utilisé la version 64 bits de Powershell pour appeler Nant
  2. plate-forme spécifiée = "x64" sur mes tâches. Je pense que je ne devrais pas avoir à faire cela parce que anycpu devrait être bon, mais il semble faire une différence.

est ici l'erreur que je reçois:

[booc] Compiling 5 files to 'C:\dev\build\MyProjectBoo.dll'. 
[booc] BCE0106: Failed to access the types defined in assembly 'MyProject, Version=5.5.0.0, Culture=neutral, PublicKeyToken=null' - (C:\dev\build\MyProject.dll):Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. 
[booc] is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) 
[booc] is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) 
[booc] . 
[booc] 1 error(s). 

Ce qui signifie, selon le code source de BOOC, «J'ai essayé d'énumérer les types pensivement dans votre assembly référencé mais echoue ». Je ne sais pas si cela signifie, "je pense que je suis 32 bits, mais ce sont des 64 bits dll" ou quoi, et je suis très confus.

Des idées sur comment je peux faire fonctionner ça?

Mise à jour après un travail, j'ai découvert que le problème n'a rien à voir avec boo. J'ai écrit un rapide programme C# qui charge la DLL de manière réfléchie et qui se brise de la même manière. Donc, pour une raison quelconque, peu importe ce que je définis comme plate-forme (x86, x64 ou anycpu), je ne peux pas le charger de manière réfléchie sur une machine x64. Donc pas vraiment la faute de Boo. Donc, je vais creuser dans cela et republier si j'ai une meilleure question.

récent mise à jour se trouve que l'une de mes principales dépendances tiers de DLL exige d'être dans un environnement 32 bits, même si elle ne se construit pas avec corflags. Cela provoque assembly.GetTypes() échouer en mode 64 bits.

Répondre

0

Le problème est lié aux dépendances sur les DLL tierces qui requièrent le mode 32 bits, ce qui est possible même si elles ne disposent pas de corflags.