Attualmente sto convertendo la nostra libreria di oggetti di business .net in un file PCL in modo che possa essere utilizzata con Xamarin IOS/Android e mentre contiene principalmente oggetti POCO, contiene anche eccezioni personalizzate ma questo è errori di lancio.Eccezioni personalizzate nei file PCL
Prendere una tipica eccezione personalizzata:
[Serializable]
public class EncryptKeyNotFoundException : Exception
{
public EncryptKeyNotFoundException()
: base() { }
public EncryptKeyNotFoundException(string message)
: base(message) { }
public EncryptKeyNotFoundException(string format, params object[] args)
: base(string.Format(format, args)) { }
public EncryptKeyNotFoundException(string message, Exception innerException)
: base(message, innerException) { }
public EncryptKeyNotFoundException(string format, Exception innerException, params object[] args)
: base(string.Format(format, args), innerException) { }
protected EncryptKeyNotFoundException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}
Come previsto il PCL non piace [Serializable]
e SerializationInfo
. Anche se potrei farla franca attaccando [DataContract] invece di usare [Serialiable]
, non risolverà comunque il problema con SerializationInfo
.
C'è comunque un modo per aggirare questo problema?
Grazie.
Aggiornamento:
ho avuto uno sguardo al Implementing custom exceptions in a Portable Class Library come suggerito, ma i seguenti 2 attributi non vengono riconosciuti:
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
Devo mancare un riferimento, ma a cui il montaggio?
Attualmente sto guardando una soluzione alternativa, come previsto in Portable class library: recommended replacement for [Serializable]
Speriamo che questo funzionerà. Aggiornerò la mia risposta una volta che avrò più informazioni da fornire.
Aggiornamento:
ClassInterfaceAttribute
fa parte dei System.RunTime.InteroServices ma non posso aggiungere questo al mio progetto PCL, beh almeno non è visibile. Mi sto perdendo qualcosa?
L'altro articolo fornisce ulteriori informazioni e sembra che quando si utilizza la compilazione condizionale, questo dovrebbe funzionare, ma ancora una volta, mentre il codice di esempio dalla libreria JSON sembra funzionare, devo essere perso qualcosa come non posso aggiungere un riferimento in modo che [Serializable]
non genera un errore, ma non sembra che sia in grado di farlo.
Una cosa che ho provato è quella di commentare semplicemente fuori:
protected EncryptKeyNotFoundException(SerializationInfo info,
StreamingContext context) : base(info, context) { }
E mi può compilare il mio progetto PCL ok, quindi la domanda è: ho bisogno di questo?
Grazie.
Penso che ciò sarà utile per te [Implementazione di eccezioni personalizzate in una libreria di classi portatile] (http://stackoverflow.com/questions/13604713/implementing-custom-exceptions-in-a-portable-class-library) –
Avevo trovato questo articolo ma non pensavo fosse pertinente. Darò un colpo e l'aggiornamento quando fatto. Grazie. – Thierry
Ho aggiornato la mia risposta ma sfortunatamente non aiuta. Mi sto perdendo qualcosa? – Thierry