Вот стандартный сценарий:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Проблема в том, что я не совсем уверен, какое исключение SomeStandardException
должно быть.
Я просмотрел 3.5 Framework и нашел двух вероятных кандидатов: ConfigurationException
и ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Исключение, которое выдается при возникновении системной ошибки конфигурации.
замечания
ConfigurationException
Исключение , если приложение пытается считывать или записывать данные в файл конфигурации , но безуспешно. Некоторые возможные причины этого могут включать в себя искаженный XML в файле конфигурации, проблемы с правами доступа к файлам и свойства конфигурации с недопустимыми значениями.Примечание:
ConfigurationException
Объект поддерживается для обратной совместимости.ConfigurationErrorsException
Объект заменяет его для конфигурации системы.
Это исключение на самом деле звучит идеально для того, что мне нужно, но оно было помечено как устаревшее, поэтому ixnay on atthay.
Это подводит нас к совершенно загадочному вопросу ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Текущее значение не является одним из значений EnableSessionState.
Как видите, его документация совершенно бесполезна. (Так обстоит дело как в локальной, так и в онлайн-справке.) Изучение самого класса показывает, что это решительный перебор для того, что я хочу.
Короче говоря, мне нужно стандартное исключение, которое должно выдаваться, когда параметр конфигурации приложения отсутствует или содержит недопустимое значение. Можно подумать, что в Framework есть такое исключение, которое можно использовать в приложениях. (По-видимому, это было так, но оно было помечено как устаревшее и было заменено чем-то гораздо более масштабным.)
Какие решения, если таковые имеются, вы, ребята, используете для этого, и мне придется принять это и свернуть собственное исключение для этого?
Изменить дополнение
Некоторые спрашивали, могу ли я указать значение по умолчанию, и продолжали. В некоторых случаях да, и в этих случаях исключение не будет создано. Однако для некоторых настроек это не применимо. Например: имена и учетные данные серверов базы данных, серверы аутентификации и пути к установленным сторонним приложениям.
Также стоит отметить, что приложение, над которым я в основном работаю, является консольным приложением, работающим в пакетном режиме, и я хочу, чтобы оно генерировало исключение, которое было перехвачено основным методом и зарегистрировано соответствующим образом, если это не настроено должным образом. (Это старый код, который я унаследовал, и в настоящее время он предполагает, что все безупречно.)
System.Configuration.ConfigurationErrorsException
Обновлена документация для .