代码之家  ›  专栏  ›  技术社区  ›  Will

对象与DesignData中的目标类型不匹配

  •  8
  • Will  · 技术社区  · 15 年前

    我把这个扔掉,以防有人以前遇到过。

    当创建设计数据以在WPF设计器中使用时,我得到两个错误之一:

    对象与目标类型不匹配。
    在System.Reflection.RuntimeMethodInfo.CheckConsistency(对象 目标)
    (剪辑)
    在Microsoft.Expression.DesignModel.InstanceBuilders.ClrobjectInstanceBuilder上。更新属性(iInstanceBuilderContext 上下文,viewnode viewnode,iproperty 属性键,documentnode valuenode)

    另一个更具信息性:

    值“.di0.myprojectlol.mytype” 不是“myprojectlol.mytype”类型 并且不能在此泛型中使用 收集。
    在 System.ThrowRongValueTypeArgumentException(对象 值,类型TargetType)
    (剪辑)
    在Microsoft.Expression.DesignModel.InstanceBuilders.ClrobjectInstanceBuilder上。 实例化子级(iInstanceBuilderContext 上下文,viewnode viewnode, 文件复合物复合物, 布尔IsNewInstance)

    在调试时,我可以看到有一个动态程序集加载了代理ISH类型, 和我的一样,但显然不是。此程序集称为Blend_RuntimeGeneratedTypeAssembly(此处为guid)。尝试加载此程序集中的类型时,它会为其中一些类型引发类型加载异常。所以,有些类型是被代理的,有些类型是上帝和我想要的,当它们混合在一起时,不自然的行为就会发生。

    例如,类型“foo”可能会创建一个代理,但没有其他类型(typeloadExceptions)。然后,设计器试图将我的一个实际类型交给代理(有助于XAML序列化喜欢将集合强制转换为IList,从而影响类型安全性),您会得到上面的一个异常。

    我花了半个星期的时间来解决这个问题。我试过上百种不同的方法,但我不知道到底是什么导致了失败。欢迎提出建议,TIA。

    2 回复  |  直到 9 年前
        1
  •  5
  •   Will    15 年前

    解决方案分为两部分:

    1)确保vs完全更新。此时,它意味着安装 Silverlight 4 tools 对于Visual Studio 2010。它们包括对WPF设计器的最新更新。如果你在遥远的将来读到这个,忽略这个。

    2)点击设计数据文件的属性。清除“自定义工具”,并将“构建操作”设置为“DesignData”或“DesignTimeDataWithDesignTimeCreatableTypes”。

    DesignData意味着您的类型不能直接从XAML反序列化(由于依赖项或类似的原因),因此设计器尝试为这些类型创建模拟,并将模拟呈现给您的设计图面。

    DesignTimeDataWithDesignTimeCreatableTypes意味着设计器将加载程序集并将XAML直接反序列化到类型中,而不创建模拟。

        2
  •  1
  •   Will    13 年前

    这个罐头 也造成 通过某种情况的组合,当组合在一起时,会导致反序列化失败。

    基本上如果你有

    • 自定义集合,或 不执行 IList
    • 在您的类型上作为属性公开的
    • 在另一个程序集中定义

    您也可以收到此错误消息。

    如果要在XAML之间序列化集合属性类型,则实现IList(非泛型类型)非常重要!