【问题标题】:Why is this Debug.Assert skipped?为什么这个 Debug.Assert 被跳过了?
【发布时间】:2018-09-17 19:08:46
【问题描述】:

我有以下代码:

Debug.Assert(model.OrganizationId != null, "model.OrganizationId != null");
var orgId = model.OrganizationId.Value;

然而Debug.Assert 行是灰色的,当我将鼠标悬停在它上面时,我收到了消息:

方法调用被跳过。编译器不会生成方法 调用,因为方法是有条件的,或者是没有的部分方法 实施。

我的 IDE 处于 Debug 模式,我没有发现其他异常。为什么这个断言被跳过?我不太关心OrganizationId 是否为空,因为它在模型上标记为Required,但我担心会跳过看起来非常正常的Debug.Assert

【问题讨论】:

    标签: c# assertions


    【解决方案1】:

    Debug.Assert 标记了这个属性。

    [System.Diagnostics.Conditional("DEBUG")]
    

    这意味着当您在项目配置中定义“DEBUG”常量时编译此方法。

    请注意,这与发布或调试构建模式无关。但默认调试配置定义了“DEBUG”常量。

    为了解决这个问题,请转到您的项目设置,构建部分,确保配置设置为调试。然后勾选“define DEBUG constant”选项。

    【讨论】:

    • 配置设置为调试,并勾选“定义调试常量”选项。我之前确实将构建配置设置为 RELEASE,但现在一切看起来都适合调试配置。唯一明确定义的条件编译符号是NETCOREAPP2_0。其他Debug.Asserts 没问题,没有被屏蔽掉。也许我应该再次重新启动 VS。谢谢。
    • 太棒了。那么问题就消失了吗?现在问题应该消失了,或者尝试重新启动 Visual Studio。
    • 重启成功了,谢谢。我很傻,没想到这一点,但我真的很忙于测试,这并没有打扰我。我接受了,因为如果这不仅仅是 VS 的怪癖,那么你的答案就已经死了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2021-03-19
    • 2015-05-06
    相关资源
    最近更新 更多