В течение многих лет я следил за рекомендациями MS по написанию настраиваемого класса исключений (даже не помню, был ли он впервые применен FxCop или прочитанной статьей) и написал мои классы следующим образом:C#, приложение Metro, специальный класс исключений
using System;
using System.Runtime.Serialization;
[Serializable]
public sealed class MyGreatException : Exception
{
public MyGreatException()
: base() {}
public MyGreatException(string message)
: base(message) {}
public MyGreatException(string message, Exception inner)
: base(message, inner) {}
private MyGreatException(SerializationInfo info, StreamingContext context)
: base(info, context) {}
}
Сегодня эти классы получают отвергнут Windows 8 App Cert Kit:
.API System.Runtime.Serialization.SerializationInfo in MSCORLIB, PUBLICKEYTOKEN=B77A5C561934E089 is not supported for this application type. com.visionobjects.myscript.hwr.dll calls this API.
.API System.SerializableAttribute in MSCORLIB, PUBLICKEYTOKEN=B77A5C561934E089 is not supported for this application type. com.visionobjects.myscript.hwr.dll calls this API.
(среди прочего отвергает ...)
Так что теперь это 2012 , как написать собственный класс исключений? Мне просто нужно удалить [Serializable]
, а частный конструктор должен иметь дело с пользовательской сериализацией (что мне не нужно в любом случае)?
EDIT
Я удалил [Serializable]
и закрытый конструктор. Я предполагаю, что мой собственный класс исключений не является сериализуемым. Как это класс, открытый библиотекой классов, как это влияет на код с помощью библиотеки?
хм, поэтому подписать «спасибо» в вашем вопросе больше не разрешено? :) –
nope, приветствия и другие обычные формы неодобрительно относятся к SO. Лично я не против, но некоторые люди их редактируют. – jv42