无法捕获断言。这很好,因为我不想在 try/catch 中包含一些错误,至少不在开发服务器上。但是断言似乎非常危险。如果它们投入生产,它可以使用 msgbox 挂起 ASP.NET 服务器。

//Don't want this on prod even if debug=true is in the web.config
#if DEBUG
    //A future client programmer can wrap this in a try{}catch{}
    if (!EverythingIsOkay)
        throw new InvalidOperationException("Dagnabbit, programming error");

    //This stops the but has less information that an
    // Exception and hangs the server if this accidentally
    // runs on production
    System.Diagnostics.Debug.Assert(!EverythingIsOkay);
#endif

有没有更好的方法可以将违反不可侵犯条件的行为传达给开发人员而不会冒挂起 IIS 的风险?

更新 :在阅读第一个回复后,我想答案取决于一种万无一失的方法来检测代码何时在开发环境中运行以及何时在生产服务器上运行,或者弄清楚如何抛出一个无法抛出的异常被捕获并被忽视。

最佳答案

我个人创建了一个名为“Defense”的类,其中包含“Assert”和“Fail”两种方法。 Assert 的工作方式类似于 xUnit “assert”,因为它接受一个 bool 条件和一条消息,如果条件为假,则该消息抛出异常。 Fail 立即抛出异常。

它非常简单,并且多次为我节省了资金。它对 ASP.NET 友好,而且死得很快。如果您担心在现实世界中抛出这些错误,您可以修改 Assert 方法,以便它记录而不是使用预处理指令 (#if DEBUG ... #endif),但在我的工作中,我宁愿看到现实世界中的硬错误而不是隐藏他们不知道发生了什么。

关于c# - 如何在 ASP.NET 中安全地 Debug.Assert?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2595725/

10-13 06:20