2012-04-23 13 views
6

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?

+1

hmm quindi firmare "grazie" nella tua domanda non è più consentito? :) –

+0

no, i saluti e altre forme usuali sono disapprovate su SO. Personalmente non mi dispiace, ma alcune persone li modificano. – jv42

risposta

2

Non sembra che System.Runtime.Serialization.SerializationInfo sia ancora supportato nella versione compatibile con Metro del framework .NET. Vedere http://msdn.microsoft.com/en-us/library/windows/apps/hh454059(v=vs.110).aspx per i dettagli sulle classi che scelgono di supportare dallo spazio dei nomi System.Runtime. Tieni presente che questo è soggetto a modifiche.

Quindi sì, estrai l'attributo Serialization e il costruttore privato.

+1

ancora più importante, estrai il tuo riferimento a una delle vecchie librerie .NET in modo da non utilizzare accidentalmente una delle tante altre cose che non sono più consentite –

Problemi correlati