VS2010 с приложением .Net 2.0 WinForms - Ошибка при привязке к универсальному списку - PullRequest
3 голосов
/ 03 ноября 2010

Я недавно перешел на Visual Studio 2010 и запустил преобразование для проекта, который отлично работал в VS2008. В Visual Studio 2010 все не так солнечно.

Это проект WinNet Forms .Net 2.0, который широко использует привязку ListViews и Grids к универсальным спискам, поэтому удаление общих списков не представляется возможным.

Я получаю следующее сообщение об ошибке (анонимно для публикации):

Could not find a type for a name.  The type name was   
'System.Collections.Generic.List`1[[MyAttribute, Domain, Version=1.0.0.5,    
Culture=neutral, PublicKeyToken=71c8708be064889a]], mscorlib, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089'. Line 134, position 5.
C:\Projects\MyProject\Control.resx

Проблема исчезнет, ​​если я сверну проект до .net 4.0, но этот проект должен быть нацелен на .net 2.0, так что это не подходящее долгосрочное решение.

Поискивая в поисках, находит множество сообщений от людей / имеющих / проблему, но ни одной, которую я вижу от людей, которые решили проблему, поэтому любая помощь будет принята с благодарностью.

Та.

Ответы [ 3 ]

1 голос
/ 11 декабря 2012

Удалите раздел в файле .resx, а затем также удалите строку в файле designer.cs (resources.GetObject("...")), которая загружает этот ресурс.

Затем попробуйте открыть элемент управления в конструкторе, и оба должны быть восстановлены, вы можете получить исключение нулевой ссылки в зависимости от элемента управления, который предоставляет свойство, которое устанавливается в конструкторе.Для меня я смог игнорировать и продолжить.

После появления дизайнера вы можете сравнить файл resx и увидеть, что любой объект теперь сериализуется немного по-другому.Кроме того, если это ваш пользовательский элемент управления, и вы предоставляете свойство общего списка, сначала поместите в него атрибут [Browsable(false)], чтобы вы не могли установить значение из конструктора, и дизайнер не установит для него новое значение автоматически.

То, что происходило в моем случае, заключалось в том, что пустой универсальный список был сериализован в файл resx, а затем после обновления Visual Studio список больше не сериализовался таким же образом.

0 голосов
/ 17 ноября 2010

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

Наша ошибка происходит из формы: TBDEV830.resx (143):Не удалось найти тип для имени.Имя типа было «System.Collections.ObjectModel.ObservableCollection`1 [[T1.Tb.SideBar.ISideBar, T1.Tb.SideBar, Version = 1.0.3702.18460, Culture = нейтральный, PublicKeyToken = null]], WindowsBase, Version =3.0.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '.Строка 143, позиция 5.

Нашли несколько сообщений с других форумов, и никто, кажется, еще не нашел решения:

Одна статья заявляет о добавлении [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)], но это никак не влияет.

Другая статья (http://www.go4answers.com/Example/tfs2008-tfs2010-migration-upgrade-3526.aspx) сообщает о загрузке ее в IDE и спрашивает, помогает ли это локализовать проблему, но это будет означать обновление проекта до 2010 г.формат, который ew не может сделать.

0 голосов
/ 03 ноября 2010

Не так много информации, чтобы продолжать здесь ..

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

...