Сбой компиляции приложения monotouch с использованием mdtool, работает в MonoDevelop

У меня есть приложение Monotouch для iPad, для которого я пытаюсь настроить сценарий автоматической сборки. Я пытаюсь использовать mdtool, но, похоже, наткнулся на стену. Если я построю решение с использованием графического интерфейса MonoDevelop, оно будет успешно построено. Однако, если я очищу решение и построю его с помощью mdtool, оно получит исключение об исключении нулевой ссылки в неизвестном файле.

Я искал в Google последние пару часов. Я думал, что нашел здесь, на Stack Overflow, пару зацепок, но все они кажутся разными ситуациями. Немногое об успешном построении пользовательского интерфейса и неудаче в интерфейсе командной строки.

Вот некоторые результаты:

     Performing main compilation...
        Updating CodeBehind files
ERROR [2011-06-03 11:27:52Z]: Error generating code for xib file '/Users/Me/Documents/Code/MyApp/MainWindow.xib'
System.NullReferenceException: Object reference not set to an instance of an object at MonoDevelop.DesignerSupport.CodeBehindWriter.<get_OpenFiles>m__21 () [0x00000] in <filename unknown>:0 
at MonoDevelop.Ide.DispatchService.GuiSyncDispatch (MonoDevelop.Ide.MessageHandler cb) [0x00000] in <filename unknown>:0 
at MonoDevelop.DesignerSupport.CodeBehindWriter.get_OpenFiles () [0x00000] in <filename unknown>:0 
at MonoDevelop.DesignerSupport.CodeBehindWriter.Write (System.CodeDom.CodeCompileUnit ccu, FilePath path) [0x00000] in <filename unknown>:0 
at MonoDevelop.MacDev.XibCodeBehind.GenerateDesignerCode (MonoDevelop.DesignerSupport.CodeBehindWriter writer, MonoDevelop.Projects.ProjectFile xibFile, MonoDevelop.Projects.ProjectFile designerFile) [0x00000] in <filename unknown>:0 
at MonoDevelop.MacDev.MacBuildUtilities.UpdateCodeBehind (IProgressMonitor monitor, MonoDevelop.MacDev.XibCodeBehind generator, IEnumerable`1 items) [0x00000] in <filename unknown>:0 

Команда, которую я выполняю, выглядит так:

/Applications/MonoDevelop.app/Contents/MacOS/mdtool -v build "--configuration:Release|iPhone" "/Users/Me/Documents/Code/MyApp/MyApp.sln" 

И, на всякий случай, вот мои версии:

    OS X: 10.6.7
    XCode: 3.2.6
    iOS SDK: 4.3
    Mono: 2.10.2
    MonoDevelop: 2.4.2
    MonoTouch: 4.0.3

Обновление (07.06.2011):

В качестве альтернативы попробовал сделать mdtool generate-makefiles. Он создал все, что можно было ожидать, и ./configure работал нормально, но make потерпел неудачу с треском. Я бы с удовольствием решил эту проблему, если у кого-то есть мысли.


person Kirk    schedule 03.06.2011    source источник
comment
Я думаю, что это может работать только при вызове внутри MD, трассировка стека подразумевает, что он пытается воздействовать на файлы, открытые в ide :(   -  person IanNorton    schedule 14.06.2011
comment
@ Ян, просто чтобы убедиться, что я слежу, вы говорите, что я просто не могу скомпилировать из CLI, что он может работать только из IDE?   -  person Kirk    schedule 14.06.2011
comment
@ Кирк, возможно :(, только догадываюсь   -  person IanNorton    schedule 14.06.2011
comment
Я чушь несу, явно это баг.   -  person IanNorton    schedule 14.06.2011
comment
@Kirk, источник этой части monodevelop находится здесь: github.com/mono/monodevelop/blob/master/extras/. Вы пробовали monodevelop 2.6 beta?   -  person IanNorton    schedule 14.06.2011
comment
@Ian, у меня нет, но в основном из-за состояния проекта MonoTouch я крайне не решаюсь вносить изменения в работающую систему. Возможно, я клонирую свой диск и посмотрю, получу ли я такие другие результаты. Я постараюсь держать вас в курсе.   -  person Kirk    schedule 14.06.2011


Ответы (1)


Это ошибка, однако код конструктора создается только в том случае, если файл xib или проекта (csproj) новее, чем файл конструктора. Создайте его один раз в среде IDE или «прикоснитесь» к файлу дизайнера, и mdtool снова заработает.

person Mikayla Hutchinson    schedule 21.06.2011
comment
Кажется, это работает, но поскольку моя цель - создать сценарий сборки в одно касание, похоже, что эта ошибка помешает моим усилиям. Однако я создаю свой сценарий на AppleScript. Это больше похоже на сценарий оболочки, но похоже, что он работает. - person Kirk; 26.06.2011
comment
Ну беру обратно, вроде забыл про прикосновение к файлу дизайнера. Я этого не пробовал. Если это сработает, мои сценарии оболочки могут по-прежнему работать. - person Kirk; 26.06.2011
comment
Прикосновение к файлу дизайнера, кажется, помогает. Но вот мой следующий вопрос: вы сказали, что код дизайнера генерируется только в том случае, если файл xib или проекта новее, чем файл дизайнера. Прикосновение к файлу конструктора устанавливает его как самый новый файл в каталоге, что делает его противоречащим исходному утверждению. - person Kirk; 26.06.2011
comment
Единственная причина, по которой файл дизайнера будет регенерирован, - это если вы изменили файл проекта или файл xib без перестройки проекта в MD, или если что-то еще (например, VCS) возится с временем записи файла. Сделав файл дизайнера более новым, чем другие файлы, вы предотвратите запуск его регенерации. - person Mikayla Hutchinson; 27.06.2011
comment
Можно ссылку на ошибку? - person Randy Syring; 19.04.2012
comment
MonoDevelop 2.8+ больше не генерирует код MonoTouch во время сборки, поэтому ошибка больше не существует. - person Mikayla Hutchinson; 23.04.2012