.NET: 必要な構成設定が見つからない場合にスローする例外はどれですか? 質問する

.NET: 必要な構成設定が見つからない場合にスローする例外はどれですか? 質問する

標準的なシナリオは次のとおりです。

if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
   throw new SomeStandardException("Application not configured correctly, bozo.");

問題は、私が完全に確信していないことですどれの例外SomeStandardExceptionがあるはずです。

3.5 フレームワークを詳しく調べたところ、2 つの候補が見つかりました。ConfigurationExceptionそしてConfigurationErrorsException

システム構成例外

構成システム エラーが発生したときにスローされる例外。

備考

アプリケーションが構成ファイルへのデータの読み取りまたは書き込みを試行して失敗した場合、例外 ConfigurationException がスローされます。この原因としては、構成ファイル内の XML の形式が正しくないこと、ファイルのアクセス許可の問題、構成プロパティの値が無効であることなどが考えられます。

注記:

このConfigurationExceptionオブジェクトは下位互換性のために維持されています。このConfigurationErrorsExceptionオブジェクトは構成システム用のオブジェクトを置き換えます。

この例外は、実際には私が必要としているものにぴったりのように思えますが、廃止とマークされているため、無視します。

これは私たちを非常に不可解なことに導くConfigurationErrorsException:

システム構成構成エラー例外

現在の値は EnableSessionState 値の 1 つではありません。

ご覧のとおり、そのドキュメントはまったく役に立ちません。(ローカル ヘルプとオンライン ヘルプの両方でそのようになっています。) クラス自体を調べてみると、私が求めているものに対して過剰な機能であることがわかります。

簡単に言うと、アプリケーション構成設定が欠落しているか無効な値が含まれている場合にスローされる標準例外が必要です。フレームワークには、アプリケーションが使用できるようにそのような例外が組み込まれていると思われます。(実際はそうでしたが、廃止とマークされ、別のものに置き換えられました。多くの範囲がより広くなります。

皆さんはこれに対してどのような解決策を使っていますか?また、我慢して独自の例外を作成する必要がありますか?

補遺の編集

デフォルト値を指定して続行できるかどうか尋ねる人もいます。場合によっては可能ですが、その場合、例外はスローされません。ただし、特定の設定では、これは適用されません。たとえば、データベース サーバー名と資格情報、認証サーバー、インストールされているサードパーティ アプリケーションへのパスなどです。

また、私が主に取り組んでいるアプリケーションは、バッチモードで実行されるコンソールアプリケーションであり、適切に構成されていない場合にメインメソッドでキャッチされ、適切にログに記録される例外をスローする必要があることも注目に値します。(これは私が継承したレガシーコードであり、現在は想定するすべて順調です。

ベストアンサー1

個人的には無効な操作例外これはオブジェクトの状態の問題であり、構成システムの問題ではありません。結局のところ、これらの設定は構成ではなくコードで設定できるようにすべきではないでしょうか? ここで重要なのは、app.config に行がなかったということではなく、必要な情報が存在しなかったということです。

私にとって、ConfigurationException (および、誤解を招く MSDN ドキュメントにもかかわらず、その代替である ConfigurationErrorsException) は、構成の保存、読み取りなどのエラー用です。

おすすめ記事