Per anni ho seguito le best practice di MS su come scrivere una classe di eccezioni personalizzata (non ricordo nemmeno se è stata applicata prima da FxCop o da un articolo che ho letto) e scrisse le mie classi seguente modo:C#, Metro Application, classe di eccezione personalizzata
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) {}
}
Oggi queste classi vengono respinti da 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.
(tra l'altro respinge ...)
Quindi, ora che è 2012 , come posso scrivere una classe di eccezioni personalizzata? Devo solo rimuovere [Serializable]
e il costruttore privato dovrebbe occuparsi di serializzazione personalizzata (che non ho bisogno comunque)?
EDIT
ho rimosso [Serializable]
e il costruttore privato. Immagino che ciò renda la mia classe di eccezioni personalizzata non serializzabile. Poiché questa è una classe esposta da una libreria di classi, in che modo ciò influisce sul codice utilizzando la libreria?
hmm quindi firmare "grazie" nella tua domanda non è più consentito? :) –
no, i saluti e altre forme usuali sono disapprovate su SO. Personalmente non mi dispiace, ma alcune persone li modificano. – jv42