2010-10-15 1 views
0

У меня есть следующий вопрос. У меня есть решение MSVS с тремя проектами.Проблема с преобразователем пользовательского типа в пакете VSX

  • первый проект VSX проект ведьмой показывает форму с сеткой свойств в нем.
  • второй типичный проект библиотеки C# с пользовательским типом преобразователя класса BooleanYesNoConverter унаследован от BooleanConverter. Этот конвертер используется для отображения Yes/No в сетке свойств вместо True/False.
  • третьего проект также C# библиотеки проект, который содержит открытый класс с одной общественной собственностью, которая имеет атрибут [TypeConverter(typeof(BooleanYesNoConverter))]

Есть ссылки на второй проект от первого и третьего.

Когда мы начинаем первый проект в режиме отладки (в экспериментальном улье VS) и нажимаем на меню, сборка плагинов загружается из третьего проекта (с помощью Assembly.LoadFrom) и создает экземпляр нашего класса (с одним общедоступным логическим свойством) , Затем он передает этот экземпляр свойству propertyGrid.SelectedObject. Сетка свойств отображает открытое свойство, но вместо этого Да/Нет показывает True/False справа.

Я поставил точки останова в методах укрытия (и конструкторе), но похоже, что мы туда не поехали. Вместо обычного преобразователя типов используется стандарт.

Интересно, что если я поместил класс BooleanYesNoConverter в третий проект (так что это будет одна сборка с моим классом), то сетка свойств показывает правильные варианты да/нет.

Благодарим за помощь!

+0

Недавно я нашел эту ссылку (http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/9d5a647e-31b1-418d-8a16-a171129a3aec/). Этот человек также сталкивается с той же проблемой. Есть предложение поместить пользовательские конвертеры в GAC, но я не делаю этого, чтобы этот конвертер был очень специфичным для проекта. – Dima

ответ

0

Surfing the Internet Я обнаружил, что не только я столкнулся с такой проблемой. Я нашел подобные вопросы в следующем месте:

http://social.msdn.microsoft.com/Forums/en/vsx/thread/a04b45d2-1d0a-4cfc-a0f0-1d458b2d6e26

(еще одна ссылка, которую вы можете найти в моем комментарии)

И я нашел подходящий (для меня) решение: Я написал сборку распознаватель. Другими словами, я добавить следующий код в метод инициализации моего плагина:

AppDomain.CurrentDomain.AssemblyResolve += 
    new ResolveEventHandler(LoadAssembly); 

и этот метод класса плагина:

private Assembly LoadAssembly(object sender, ResolveEventArgs e) 
    { 
     int commaIndex = e.Name.IndexOf(','); 
     string fileName = e.Name.Substring(0, commaIndex) + ".dll"; 
     Assembly assembly = Assembly.LoadFrom(fileName); 
     return assembly; 
    } 

Сейчас он работает отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^