Реализация настраиваемых исключений в переносимой библиотеке классов

При разработке пользовательских исключений для .NET MSDN предоставляет эти рекомендации. В частности, в правилах указано, что настраиваемое исключение:

  • должен быть сериализуемым, т.е. реализовывать ISerializable и быть украшен атрибутом [Serializable], и
  • должен реализовывать конструктор (де) сериализации, то есть protected CustomException(SerializationInfo info, StreamingContext context).

Однако в Portable Class Library ни один из SerializableAttribute, ISerializable и SerializationInfo не поддерживается.

Как мне в достаточной степени разработать настраиваемое исключение в переносимой библиотеке классов, которое одновременно нацелено на .NET Framework и одну или несколько платформ?


person Anders Gustafsson    schedule 28.11.2012    source источник


Ответы (1)


По сути, игнорируйте это руководство - оно предназначено для полной версии .NET и не применяется к проектам переносимых библиотек классов. Действительно, если мы посмотрим (скажем) на Silverlight (который включает WP7) мы видим:

[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public class Exception

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

person Marc Gravell    schedule 28.11.2012
comment
Большое спасибо за разъяснения, Марк. Я подозревал, что это так (например, руководство не обновлялось для .NET 4.5), но получить подтверждение из надежного источника кажется более надежным. - person Anders Gustafsson; 28.11.2012
comment
@Anders Я добавил несколько примечаний в раздел «Содержимое сообщества» - они могут появиться в какой-то момент. - person Marc Gravell; 28.11.2012
comment
Однако некоторые из них применяются во время выполнения. Например, если вы попытаетесь добавить что-то в коллекцию Exception.Data, это вызовет исключение во всей платформе, но не в Silverlight. - person John Gietzen; 20.04.2013