2012-04-23 10 views
6

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?

+1

hmm, więc podpisanie "dziękuję" w pytaniu nie jest już dozwolone? :) –

+0

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

Odpowiedz

2

Nie wygląda na to, że System.Runtime.Serialization.SerializationInfo jest już obsługiwany w wersji platformy .NET zgodnej z Metro. Zobacz http://msdn.microsoft.com/en-us/library/windows/apps/hh454059(v=vs.110).aspx, aby uzyskać szczegółowe informacje o klasach, które wybierają do obsługi z obszaru nazw System.Runtime. Pamiętaj, że to może ulec zmianie.

Tak, więc wyjąć swój atrybut szeregowania i prywatny konstruktor.

+1

Co ważniejsze, usuń swoje odniesienie do którejkolwiek ze starych bibliotek .NET, aby przypadkowo nie użyć jednej z wielu innych rzeczy, które nie są już dozwolone –

Powiązane problemy