Объект не соответствует целевому типу в DesignData - PullRequest
8 голосов
/ 28 мая 2010

Я выкидываю это на тот случай, если кто-то сталкивался с этим раньше.

При создании DesignData для использования в конструкторе WPF я получаю одну из двух ошибок:

Объект не соответствует типу цели.
в System.Reflection.RuntimeMethodInfo.CheckConsistency (Object мишени)
(СНИП)
в Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder. UpdateProperty (IInstanceBuilderContext контекст, ViewNode ViewNode, IProperty propertyKey, DocumentNode valueNode)

Другой немного более информативен:

Значение "_.di0.MyProjectLol.MyType" не относится к типу "MyProjectLol.MyType" и не может быть использован в этом родовом коллекция.
в System.ThrowHelper.ThrowWrongValueTypeArgumentException (Объект значение, тип targetType)
(СНИП)
в Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder. InstantiateChildren (IInstanceBuilderContext контекст, ViewNode ViewNode, DocumentCompositeNode CompositeNode, Boolean isNewInstance)

При отладке я вижу, что есть динамическая сборка, загруженная типами прокси-серверов, которые выглядят как мои, но, очевидно, таковыми не являются. Эта сборка называется Blend_RuntimeGeneratedTypeAssembly (здесь идет Guid). При попытке загрузить типы в этой сборке он выдает исключение загрузки типов для ряда из них. Таким образом, некоторые типы проксируются, некоторые типы остаются такими, как нам и Богом, и когда они смешиваются, происходят неестественные действия.

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

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

Ответы [ 2 ]

5 голосов
/ 16 июня 2010

Решение в двух частях:

1) Убедитесь, что VS полностью обновлен. На этом этапе это означает установку Silverlight 4 tools для Visual Studio 2010. Они включают последние обновления для дизайнера WPF. Если вы читаете это в далеком будущем, игнорируйте это.

2) Хит свойства для ваших файлов данных дизайна. Удалите «Пользовательский инструмент» и установите для «Действия сборки» значение «DesignData» или «DesignTimeDataWithDesignTimeCreatableTypes».

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

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

1 голос
/ 23 марта 2012

Это может также быть вызвано определенной комбинацией ситуаций, которые при объединении приводят к неудачной десериализации.

По существу, если у вас есть

  • Пользовательская коллекция или коллекция, которая не реализует IList
  • Это выставлено как свойство вашего типа
  • который определен в другой сборке

Вы также можете получить это сообщение об ошибке.

Очень важно, чтобы типы свойств вашей коллекции реализовывали IList (неуниверсальный), если вы хотите сериализовать их в xaml и из него!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...