質問
どのように私はプログラム的に決定することができますかどうか ELMAH の?有効になっている。
解決
そのためます:
ELMAHを動的に追加することができ ASP.NET Webアプリケーションを実行している、または 上でも、すべてのASP.NET Webアプリケーション 必要とせず、機械、 再コンパイルや再配備ます。
あなたはそれが存在しているかどうかを検出する必要はありません。ただ、それが存在していたかのように、あなたのロギングコードを書き、それがない場合は、何も記録されません。
興味深いのは?:<のhref = "https://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute/779961# 779961" > ASP.NET MVC [のHandleError]属性を持つ仕事にELMAHを取得するには?の(受け入れられた答えはELMAHの作者である)
他のヒント
あなたはのHttpApplicationを経由して、すべてのロードされたモジュールを(列挙することができます.Modulesはを)とELMAHモジュールが存在する場合、ELMAHが有効になっている
foreach (var m in Application.Modules) {
if (m is Elmah.ErrorlogModule) {
// ...
}
}
わかりません。これをtreedしていない。
さらにタダスの答えに、私は次のコードをその私のための作品(それはコンパイルする場合、私はYMMVので、チェックせずに、VBからこれを翻訳していることに注意してください)を思い付います:
bool foundElmah = false;
foreach (var m in HttpContext.Current.ApplicationInstance.Modules) {
var module = HttpContext.Current.ApplicationInstance.Modules.Item(m);
if (module is Elmah.ErrorLogModule || module is Elmah.ErrorMailModule || module is Elmah.ErrorFilterModule || module is Elmah.ErrorTweetModule) {
foundElmah = true;
break;
}
}
if (foundElmah) {
// do something here, like populate the application cache so you don't have to run this code every time
return true;
} else {
// store in application cache, etc.
return false;
}
これはまた、(私はWindows認証を使用していた)私はelmah.axdを要求したときに401応答を取得していた問題を回避し、かつはるかに高速で、かつelmah.axdのための特定の場所を想定していません。