Aquí hay un escenario estándar:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
El problema es que no estoy completamente seguro de qué excepción SomeStandardException
debería ser.
Leí detenidamente el Marco 3.5 y encontré dos posibles candidatos: ConfigurationException
y ConfigurationErrorsException
.
System.Configuration.ConfigurationException
La excepción que se produce cuando se produce un error del sistema de configuración.
Observaciones
LaConfigurationException
excepción se produce si la aplicación intenta leer o escribir datos en el archivo de configuración pero no tiene éxito. Algunas posibles razones para esto pueden incluir XML con formato incorrecto en el archivo de configuración, problemas de permisos de archivo y propiedades de configuración con valores que no son válidos.Nota:
El
ConfigurationException
objeto se mantiene por compatibilidad con versiones anteriores. ElConfigurationErrorsException
objeto lo reemplaza por el sistema de configuración.
Esta excepción en realidad suena perfecta para lo que necesito, pero se ha marcado como obsoleta, por lo tanto, ixnay en atthay.
Esto nos lleva a lo completamente desconcertante ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
El valor actual no es uno de los valores de EnableSessionState.
Como puede ver, su documentación es completamente inútil. (Es así en la ayuda local y en línea.) Un examen de la clase en sí muestra que es una exageración drástica de lo que quiero.
En pocas palabras, necesito una excepción estándar que se debe lanzar cuando falta una configuración de la aplicación o contiene un valor no válido. Se podría pensar que el Framework tenía una excepción incorporada para que las aplicaciones lo usaran. (Aparentemente lo hizo, pero se marcó como obsoleto y fue reemplazado por algo mucho más amplio).
¿Qué soluciones, si hay alguna, están usando para esto? ¿Tendré que aguantar y rodar mi propia excepción para esto?
Editar apéndices
Algunos han preguntado si puedo proporcionar un valor predeterminado o no y continuar. En ciertos casos, sí, y en esos casos, no se lanzaría la excepción. Sin embargo, para ciertas configuraciones, esto no se aplicará. Por ejemplo: nombres y credenciales de servidores de bases de datos, servidores de autenticación y rutas a aplicaciones de terceros instaladas.
También vale la pena señalar que la aplicación en la que estoy trabajando principalmente es una aplicación de consola que se ejecuta en modo por lotes, y quiero que arroje una excepción que sea atrapada por el método principal y se registre adecuadamente si la cosa no está configurada adecuadamente. (Es un código heredado que heredé, y actualmente solo asume que todo es color de rosa).
System.Configuration.ConfigurationErrorsException
ha sido actualizada.