標準的なシナリオは次のとおりです。
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
問題は、例外がどれであるSomeStandardException
かが完全にわからないことです。
私は3.5フレームワークを熟読して2有望な候補が見つかりました:ConfigurationException
とConfigurationErrorsException
。
System.Configuration.ConfigurationException
構成システムエラーが発生したときにスローされる例外。
備考
ConfigurationException
アプリケーションの試みは、読み取りまたは構成ファイルへの書き込みデータが、失敗したした場合、例外がスローされます。これには、構成ファイル内の不正なXML、ファイルのアクセス許可の問題、および無効な値を持つ構成プロパティが含まれる可能性があります。注意:
ConfigurationException
オブジェクトは、下位互換性のために維持されます。ConfigurationErrorsException
オブジェクトは、構成システムのオブジェクトを置き換えます。
この例外は実際には私が必要としているものに完璧に聞こえますが、廃止されたとマークされているので、ixnayはついに発表しました。
これは私たちを徹底的に不可解に導きますConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
現在の値は、EnableSessionState値の1つではありません。
ご覧のとおり、そのドキュメントはまったく役に立ちません。(ローカルヘルプとオンラインヘルプの両方でそのようになっています。)クラス自体を調べてみると、私が望むものに対して大幅な過剰であることがわかります。
簡単に言うと、アプリケーションの構成設定がないか、無効な値が含まれている場合にスローされる標準の例外が必要です。フレームワークには、アプリケーションで使用できるようにそのような例外が組み込まれていると思います。(確かにそうでしたが、時代遅れとマークされ、スコープがはるかに大きいものに置き換えられました。)
もしあれば、あなたはこれにどのような解決策を使用していますか?私はそれを吸い上げてこれについて自分の例外をロールバックする必要がありますか?
補遺を編集
デフォルト値を指定して続行できるかどうかを尋ねる人もいます。特定のケースでは、はい、そのようなケースでは、例外はスローされません。ただし、特定の設定では、これは適用されません。たとえば、データベースサーバー名と認証情報、認証サーバー、インストールされているサードパーティアプリケーションへのパスなどです。
また、私が主に取り組んでいるアプリケーションはバッチモードで実行されているコンソールアプリケーションであり、mainメソッドによってキャッチされ、適切に構成されていない場合は適切にログに記録される例外をスローすることにも注意してください。(これは私が継承したレガシーコードであり、現在はすべてが桃色だと想定しています。)
System.Configuration.ConfigurationErrorsException
が更新されました。