Od lat śledzę najlepsze praktyki MS dotyczące pisania niestandardowej klasy wyjątku (nie pamiętam nawet, czy była ona najpierw egzekwowana przez FxCop lub przez przeczytany artykuł) i napisał moje zajęcia w następujący sposób:C#, aplikacja Metro, niestandardowa klasa wyjątków
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) {}
}
Dziś te zajęcia się odrzucony przez aplikację Windows 8 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.
(między innymi odrzuca ...)
Więc teraz, że jest to 2012 , jak napisać niestandardową klasę wyjątków? Czy po prostu muszę usunąć [Serializable]
, a prywatny konstruktor powinien poradzić sobie z serializacją niestandardową (której i tak nie potrzebuję)?
EDIT
usunąłem [Serializable]
i prywatny konstruktor. Domyślam się, że moja niestandardowa klasa wyjątków jest niezdolna do serializacji. Ponieważ jest to klasa ujawniona przez bibliotekę klas, w jaki sposób wpływa to na kod przy użyciu biblioteki?
hmm, więc podpisanie "dziękuję" w pytaniu nie jest już dozwolone? :) –
nie, pozdrowienia i inne zwykłe formularze są mile widziane na SO. Osobiście nie mam nic przeciwko, ale niektórzy ludzie je edytują. – jv42