Nant, Booc и x64 - PullRequest
       31

Nant, Booc и x64

1 голос
/ 03 марта 2009

У меня есть проект .NET, который всегда создавался / запускался на / на 32-битных машинах. Я получил новый 64-битный компьютер, и я пытаюсь справиться с задачей заставить его работать там. Скрипт сборки находится в nant, и в какой-то момент мы скомпилировали некоторый код boo, используя задачу nant. Код boo ссылается на нашу базовую DLL, которая была собрана из исходного кода c # ранее в процессе сборки.

Я пробовал две вещи: собрать его для работы в 32-битном режиме и собрать для работы в 64-битном режиме. Используя corflags в нескольких программах (включая booc), я смог построить проект, построенный в 32-битном режиме, но в ходе выполнения у меня возникли проблемы с нисходящим потоком. Поэтому мне нужно, чтобы он был встроен в 64-битный режим, который я считаю предпочтительным в любом случае.

Согласно исходному коду nant / booc, задача booc nant вызывает внутрипроцессный booc.exe с использованием класса Process CLR, поэтому (я думаю) она должна наследовать 32-битную или 64-битную от родительского процесса. Это не отражает то, что я вижу.

Вот что я сделал:

  1. Использовал 64-битную версию powershell для вызова nant
  2. Указанная платформа = "x64" в моих задачах. Я чувствую, что не должен был этого делать, потому что с anycpu все должно быть в порядке, но, похоже, это что-то меняет.

Вот ошибка, которую я получаю:

[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).

Что означает, согласно исходному коду Booc, «я попытался рефлексивно перечислить типы в вашей сборке, на которую ссылаются, но не смог». Я не знаю, означает ли это: «Я думаю, что я 32-битный, но это 64-битные DLL» или что-то еще, и я очень запутался.

Любые идеи о том, как я могу заставить это работать?

Обновление после некоторой работы я обнаружил, что проблема не имеет ничего общего с boo. Я написал быструю программу на C #, которая рефлексивно загружает dll, и она ломается таким же образом. Поэтому по какой-то причине, независимо от того, что я установил в качестве платформы (x86, x64 или anycpu), я не могу отражательно загрузить ее на машину x64. Так что на самом деле не виноват Бу. Так что я собираюсь покопаться в этом и сделать репост, если у меня есть вопрос получше.

Новое обновление Оказывается, что одна из сторонних зависимостей моей основной DLL настаивает на том, чтобы находиться в 32-битной среде, даже если она не построена с corflags. Это вызывает сборку. Ошибка GetTypes () в 64-битном режиме.

1 Ответ

0 голосов
/ 03 марта 2009

Проблема заключается в зависимости от сторонних DLL, которые требуют 32-битного режима, что возможно, даже если они не имеют установленных флагов.

...