【问题标题】:ReflectionTypeLoadException with Silverlight serialization attributes具有 Silverlight 序列化属性的 ReflectionTypeLoadException
【发布时间】:2010-06-08 07:57:09
【问题描述】:

我正在尝试从 .NET 3.5 应用程序检查 silverlight 4 程序集中的类型。我已经用 Assembly.ReflectionOnlyLoadFrom 语句加载了 silverlight 程序集。

contractsAssembly = Assembly.ReflectionOnlyLoadFrom(contractsAssemblyPath);

当 .NET 应用程序尝试调用 GetTypes() 时,它会引发 ReflectionTypeLoadException。

Type[] types = contractsAssembly.GetTypes();

ReflectionTypeLoadException 中的 LoaderExceptions 属性包含一个异常列表,所有这些异常都与加载具有序列化属性的类型有关。

程序集“YYYY”中的类型“XXXX”具有方法“OnSerializing”,其修饰的序列化属性的签名不正确。

XXXX 类型有如下定义:

    [System.Runtime.Serialization.OnSerializing]
    public void OnSerializing(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnSerialized]
    public void OnSerialized(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnDeserializing]
    public void OnDeserializing(System.Runtime.Serialization.StreamingContext context)


    [System.Runtime.Serialization.OnDeserialized]
    public void OnDeserialized(System.Runtime.Serialization.StreamingContext context)

我尝试将方法签名更改为内部或私有,但没有成功。当我在检查此程序集的 silverlight 应用程序中执行 GetTypes() 调用时,我没有遇到任何问题,所以我认为这是由于 .NET Framework 和 Silverlight 之间的不兼容造成的。但是,我看到诸如 Reflector 之类的 .NET 工具可以检查此 Silverlight 程序集,因此有一种方法可以检查具有来自 .NET 应用程序的序列化属性的 Silverlight 程序集。有人可以帮我解释一下吗?

非常感谢。

何塞·安东尼奥

【问题讨论】:

    标签: c# silverlight reflection serialization


    【解决方案1】:

    实际上,我不认为这与 Silverlight 和 .NET Framework 之间的不兼容有关,而是与 3.5 和 4.0 .NET Framework(2.0 和 4.0 CLR)之间的不兼容有关。

    Since you cannot reference 4.0 assemblies in 3.5 project,我想您也可能无法以动态方式成功加载它们。


    致任何有类似错误的人,但在混合程序集时不会。

    程序集“YYYY”中的类型“XXXX”具有方法“OnSerializing”,其修饰的序列化属性的签名不正确。

    确保将StreamingContext context 指定为参数。我有以下方法,但失败并出现上述错误:

        [OnDeserialized]
        private void OnDeserialized()
        {
            Init();
        }
    

    尽管这个问题已经很老了,但我希望它会对某人有所帮助。

    【讨论】:

    • 最后我没有解决这个问题,我放弃了这个问题。现在我检查了源代码,发现一个伙伴采用了相同的方法(添加 StreamingContext 参数)来解决问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多