Das Objekt stimmt nicht mit dem Zieltyp in DesignData überein

8

Ich werfe das raus, falls jemand das schon einmal gesehen hat.

Wenn ich DesignData für die Verwendung im WPF-Designer erstelle, erhalte ich einen von zwei Fehlern:

  

Objekt stimmt nicht mit dem Zieltyp überein.
  bei System.Reflection.RuntimeMethodInfo.CheckConsistency (Object   Ziel)
(SNIP)
  bei Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder. UpdateProperty (IInstanceBuilderContext   Kontext, ViewNode viewNode, IProperty   propertyKey, DocumentNode valueNode)

Der andere ist etwas informativer:

  

Der Wert "_.di0.MyProjectLol.MyType"   ist nicht vom Typ "MyProjectLol.MyType"   und kann nicht in diesem generischen verwendet werden   Sammlung.
  beim   System.ThrowHelper.ThrowWrongValueTypeArgumentException (Objekt   value, Type targetType)
(SNIP)
  bei Microsoft.Expression.DesignModel.InstanceBuilders.ClrObjectInstanceBuilder.   InstantiateChildren (IInstanceBuilderContext   Kontext, ViewNode viewNode,   DocumentCompositeNode compositeNode,   Boolean isNewInstance)

Beim Debuggen kann ich sehen, dass es eine dynamische Assembly gibt, die mit proxy-ischen Typen geladen ist, die wie meine aussehen, aber offensichtlich nicht. Diese Assembly heißt Blend_RuntimeGeneratedTypeAssembly (Guid geht hier). Wenn Sie versuchen, Typen in dieser Assembly zu laden, wird eine Ausnahme vom Typ load für eine Anzahl von Typen ausgelöst. So werden einige Typen umschrieben, einige Arten bleiben als Gott und ich intendiert, und wenn sie sich vermischen, entstehen unnatürliche Handlungen.

Zum Beispiel kann der Typ "Foo" einen Proxy erstellen, aber keine anderen Typen (TypeLoadExceptions). Dann versucht der Designer, einem meiner realen Typen den Proxy zu geben (unterstützt durch die Tatsache, dass die XAML-Serialisierung gerne Collections nach IList wirft, was die Typsicherheit beschämt) und Sie erhalten eine der oben genannten Ausnahmen.

Ich habe eine halbe Woche damit verbracht, das Problem zu beheben. Ich habe hundert verschiedene Dinge ausprobiert, aber ich kann nicht genau herausfinden, was das verursacht. Vorschläge sind willkommen, TIA.

    
Will 28.05.2010, 19:52
quelle

2 Antworten

5

Lösung in zwei Teilen:

1) Stellen Sie sicher, dass VS vollständig aktualisiert ist. An dieser Stelle bedeutet es, die Silverlight 4-Tools für Visual Studio 2010 zu installieren. Sie enthalten die neuesten Updates für den WPF-Designer. Wenn Sie das in ferner Zukunft lesen, ignorieren Sie dieses.

2) Treffen Sie die Eigenschaften für Ihre Konstruktionsdatendateien. Deaktivieren Sie "Benutzerdefiniertes Tool" und legen Sie die "Build-Aktion" auf "DesignData" oder "DesignTimeDataWithDesignTimeCreatableTypes" fest.

DesignData bedeutet, dass Ihre Typen nicht direkt aus XAML deserialisiert werden können (aufgrund von Abhängigkeiten oder dergleichen), sodass der Designer versucht, Mocks für diese Typen zu erstellen und die Mocks Ihrer Designoberfläche zu präsentieren.

DesignTimeDataWithDesignTimeCreatableTypes bedeutet, dass der Designer Ihre Assemblys lädt und das Xaml direkt in Ihre Typen deserialisiert, ohne Mocks zu erstellen.

    
Will 16.06.2010, 13:37
quelle
1

Dies kann auch durch eine bestimmte Kombination von Situationen verursacht werden, die zusammen die Deserialisierung zum Scheitern bringen.

Im Wesentlichen wenn Sie

haben
  • Eine benutzerdefinierte Sammlung oder eine Sammlung, die nicht implementiert IList
  • Dies wird als Eigenschaft Ihres Typs angezeigt
  • Was in einer anderen Baugruppe definiert ist

Sie können diese Fehlermeldung auch erhalten.

Es ist sehr wichtig, dass Ihre Sammlungseigenschaftstypen IList (das nicht-generische) implementieren, wenn Sie sie zu und von xaml serialisieren möchten!

    
Will 22.03.2012 21:42
quelle

Tags und Links