Ecco uno scenario standard:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Il problema è che non sono del tutto sicuro di quale eccezione SomeStandardException
debba essere.
Ho esaminato attentamente il Framework 3.5 e ho trovato due probabili candidati: ConfigurationException
e ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Eccezione generata quando si è verificato un errore di sistema di configurazione.
Osservazioni
L'ConfigurationException
eccezione viene generata se l'applicazione tenta di leggere o scrivere dati nel file di configurazione ma non riesce. Alcuni possibili motivi possono includere XML non valido nel file di configurazione, problemi di autorizzazione del file e proprietà di configurazione con valori non validi.Nota:
L'
ConfigurationException
oggetto viene mantenuto per compatibilità con le versioni precedenti. L'ConfigurationErrorsException
oggetto lo sostituisce per il sistema di configurazione.
Questa eccezione in realtà sembra perfetta per ciò di cui ho bisogno, ma è stata contrassegnata come obsoleta, quindi, ixnay su atthay.
Questo ci porta al più sconcertante ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Il valore corrente non è uno dei valori EnableSessionState.
Come puoi vedere, la sua documentazione è completamente inutile. (È così sia nella guida locale che in linea.) Un esame della classe stessa mostra che è eccessivo per quello che voglio.
In poche parole, ho bisogno di un'eccezione standard che dovrebbe essere generata quando un'impostazione di configurazione dell'applicazione manca o contiene un valore non valido. Penseresti che il Framework avesse un'eccezione del genere incorporata per le applicazioni da utilizzare. (Apparentemente lo ha fatto, ma è stato contrassegnato come obsoleto ed è stato sostituito da qualcosa di molto più ampio.)
Quali soluzioni, se ce ne sono, state usando per questo, e dovrò succhiarlo e tirare la mia eccezione per questo?
Modifica addenda
Alcuni hanno chiesto se potevo fornire un valore predefinito e continuare. In alcuni casi, sì, e in quei casi, l'eccezione non verrebbe generata. Tuttavia, per alcune impostazioni, questo non si applica. Ad esempio: nomi e credenziali del server di database, server di autenticazione e percorsi per le applicazioni di terze parti installate.
Vale anche la pena notare che l'applicazione su cui sto lavorando principalmente è un'applicazione console in esecuzione in modalità batch e voglio che generi un'eccezione che viene rilevata dal metodo principale e registrata in modo appropriato se la cosa non è configurata in modo appropriato. (È un codice legacy che ho ereditato e attualmente presume che tutto sia peachy.)
System.Configuration.ConfigurationErrorsException
è stata aggiornata.