سؤال

كيف يمكنني تحديد برمجيًا سواء المسح تم تمكين؟

هل كانت مفيدة؟

المحلول

لان:

يمكن إضافة Elmah ديناميكيًا إلى تطبيق ويب ASP.NET قيد التشغيل ، أو حتى جميع تطبيقات الويب ASP.NET على الجهاز ، دون أي حاجة لإعادة التجميع أو إعادة النشر.

يجب ألا تحتاج إلى اكتشاف ما إذا كان موجودًا. فقط اكتب رمز التسجيل الخاص بك كما لو كان موجودًا ، وإذا لم يكن كذلك ، فلن يتم تسجيل أي شيء.

من اهتمام؟: كيفية الحصول على Elmah للعمل مع السمة ASP.NET MVC [HandleRror]؟ (الإجابة المقبولة هي مؤلف Elmah)

نصائح أخرى

يمكنك تعداد جميع الوحدات المحملة (عبر httpapplication.modules) وإذا كانت وحدة Elmah موجودة ، يتم تمكين Elmah:


foreach (var m in Application.Modules) {
  if (m is Elmah.ErrorlogModule) {
   // ...
  }
}

لست متأكدا. لم ترييد هذا.

علاوة على إجابة Tadas ، توصلت إلى الكود التالي الذي يعمل بالنسبة لي (لاحظ أنني قمت بترجمة هذا من VB دون التحقق مما إذا كان يتم تجميعه ، لذلك YMMV):

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;
}

هذا أيضًا يدور حول المشكلات التي واجهتها في الحصول على استجابة 401 عند طلب elmah.axd (كنت أستخدم مصادقة Windows) ، وهو أسرع بكثير ، ولا يفترض موقعًا محددًا لـ elmah.axd.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top