Monodevelop предупреждение "Не удалось сгенерировать код для виджетов типа: xxxx" - PullRequest
0 голосов
/ 19 августа 2010

Около 2 лет назад я работал над проектом на C #, используя MonoDevelop V1 и более позднюю версию V2 (бета-версия, скомпилированная из исходного кода, что за миссия) под Fedora. Проект сдох. Сейчас я возвращаю его к жизни, но я изменил свою платформу разработки на Debian (тестирование, т.е. сжатие), который имеет MonoDevelop V2.2.

Я в основном очень доволен функциями V2.2, но у меня есть небольшая неприятная проблема. Весь код компилируется нормально, но в конце прогона компиляции у меня остается много предупреждений, как в строке темы. Очевидно, что как только я пытаюсь запустить приложение, я получаю исключения слева, справа и по центру, когда открываю все, что использует эти виджеты.

Самое смешное, что библиотека, содержащая виджеты, прекрасно компилируется. Но почему-то эти виджеты (это не все, только один или два) не отображаются на интерфейсе, и затем последующие диалоги или окна, использующие их, выдают вышеупомянутое предупреждение.

Кто-нибудь имел эту проблему? Я гуглил это, и все, что приходит на ум, это Майкл Хатчинсон, поднявший руки в воздух и говорящий: «Извините, здесь ничего не поделаешь». Мне действительно нужно исправить это, иначе мне придется переписывать существенные куски кода с нуля.

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Я бы порекомендовал попробовать MonoDevelop 2.4, но в любом случае вот несколько советов.

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

Если у вас нет вышеуказанной проблемы, или если решение не работает, проблема может быть в том, что файл objects.xml, который содержит информацию об экспортированных виджетах, не обновлен должным образом. Вы найдете этот файл в проекте, который реализует пользовательские виджеты, в скрытой папке gtk-gui. Откройте файл и проверьте, все ли пользовательские виджеты там объявлены. Если виджет отсутствует, попробуйте открыть файл исходного кода виджета и сделать небольшое изменение (например, изменение пробела), а затем снова построить проект. MonoDevelop должен корректно обновлять файл.

Если проблема не устранена, отправьте отчет об ошибке .

1 голос
/ 20 августа 2010

Я думаю, что нашел выход.Не уверен, является ли это «официальным» методом, но, похоже, он работает.
В этой библиотеке определение класса обычного виджета начинается следующим образом:

namespace Amino.Common {</p> <pre><code>//! A text entry combined with a pop-up date selector, very useful for otherwise busy dialogs public class DatePicker : Gtk.Bin {

Если я добавлю два дополнительных объявления прямо перед оператором класса, например: namespace Amino.Common {</p> <pre><code>//! A text entry combined with a pop-up date selector, very useful for otherwise busy dialogs [System.ComponentModel.Category("Common")] [System.ComponentModel.ToolboxItem(true)] public class DatePicker : Gtk.Bin {

, то

  1. Этот виджет будет включен в файл objects.xmlи
  2. Все решение компилируется, как ожидалось (и работает, как ожидалось).

Возможно, кто-то мог бы пролить некоторый дополнительный свет на это, я хотел бы понять это лучше.

...