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 SomeStandardExceptiondebba essere.
Ho esaminato attentamente il Framework 3.5 e ho trovato due probabili candidati: ConfigurationExceptione ConfigurationErrorsException.
System.Configuration.ConfigurationException
Eccezione generata quando si è verificato un errore di sistema di configurazione.
Osservazioni
L'ConfigurationExceptioneccezione 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'
ConfigurationExceptionoggetto viene mantenuto per compatibilità con le versioni precedenti. L'ConfigurationErrorsExceptionoggetto 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.