2010-08-19 1 views
0

Около 2 лет назад я работал над проектом C#, используя MonoDevelop V1 и более поздние версии V2 (бета-версия, собранная из источника, какая миссия) в Fedora. Проект погубил. Теперь я возвращаю его к жизни, но я изменил свою платформу разработки на Debian (тестирование, т. Е. Сжатие), в котором есть MonoDevelop V2.2.Предупреждение о Monodevelop «Не удалось создать код для виджетов типа: xxxx»

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

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

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

ответ

2

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

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

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

Если у вас по-прежнему возникают проблемы, напишите bug report.

+0

Спасибо за указатели. Виджеты не используются в одном проекте (я давно изучил этот урок).Я проверю XML-файл. Будет ли смысл пытаться обновить этот файл вручную? – wolfgangsz

+0

Вы можете попробовать обновить вручную, хотя MonoDevelop может перезаписать его. –

+0

Хм, этот файл полностью отключен, т. Е. Его содержимое совсем не описывает виджеты, которые должны быть экспортированы из библиотеки. Я удалил файл (с резервным копированием), а MonoDevelop НЕ перестраивает его. – wolfgangsz

1

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

namespace Amino.Common {

//! A text entry combined with a pop-up date selector, very useful for otherwise busy dialogs 
public class DatePicker : Gtk.Bin 
{ 

Если я теперь добавить два дополнительных деклараций прямо перед классом заявления, как это: namespace Amino.Common {

//! 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. Все решение компилируется, как и ожидалось (и работает так, как ожидалось).

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