ReflectionTypeLoadException с атрибутами сериализации Silverlight - PullRequest
2 голосов
/ 08 июня 2010

Я пытаюсь проверить типы в сборке silverlight 4 из приложения .NET 3.5. Я загрузил сборку Silverlight с предложением Assembly.ReflectionOnlyLoadFrom.

contractsAssembly = Assembly.ReflectionOnlyLoadFrom(contractsAssemblyPath);

Когда приложение .NET пытается выполнить вызов GetTypes (), оно генерирует исключение ReflectionTypeLoadException.

Type[] types = contractsAssembly.GetTypes();

Свойство LoaderExceptions в ReflectionTypeLoadException содержит список исключений, все они касаются проблемы загрузки типа с атрибутами сериализации.

Тип «XXXX» в сборке «YYYY» имеет метод «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)

Я попытался изменить подпись метода на внутреннюю или личную, но безуспешно. Когда я выполняю вызов GetTypes () в приложении silverlight, которое проверяет эту сборку, у меня нет проблем, поэтому я подумал, что это связано с несовместимостью .NET Framework и Silverlight. Однако я вижу, что инструменты .NET, такие как Reflector, могут проверять эту сборку Silverlight, поэтому есть способ проверять сборки Silverlight с атрибутами сериализации из приложения .NET. Может ли кто-нибудь пролить мне свет на это?

Большое спасибо заранее.

Хосе Антонио

1 Ответ

2 голосов
/ 06 апреля 2012

На самом деле я не думаю, что речь идет о несовместимости между Silverlight и .NET Framework, а о несовместимости между 3.5 и 4.0 .NET Framework (2.0 и 4.0 CLR).

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


Всем, у кого есть похожие ошибки, но не при смешивании сборок.

Тип «XXXX» в сборке «YYYY» имеет метод «OnSerializing» с неверной подписью для атрибута сериализации, которым он оформлен.

Убедитесь, что вы указали StreamingContext context в качестве параметра. У меня был следующий метод, и он не с ошибкой выше:

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

Хотя этот вопрос довольно старый, я надеюсь, он кому-нибудь поможет.

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