.net 什么使CLR显示断言?
如果我在visualstudio中为我的C#项目定义了Debug常量,我可以确定断言将被评估,并且当它们失败时会显示一个消息框。但是,哪个标志、属性使CLR在运行时实际决定是否计算和显示断言。当定义调试时,断言代码是否不在IL中结束?还是程序集的DebuggableAttribute中的标志是关键点?如果是,它的枚举值必须是什么?这在后台是如何工作的?对System.Diagnostics.Debug类和Debug定义的方法的ConditionalAttribute。如果编译时未定义调试预处理器符号,则编译代码中将忽略对Debug.Assert的任何调用 如果查看,您将看到它在声明上有.net 什么使CLR显示断言?,.net,debugging,clr,assertions,.net,Debugging,Clr,Assertions,如果我在visualstudio中为我的C#项目定义了Debug常量,我可以确定断言将被评估,并且当它们失败时会显示一个消息框。但是,哪个标志、属性使CLR在运行时实际决定是否计算和显示断言。当定义调试时,断言代码是否不在IL中结束?还是程序集的DebuggableAttribute中的标志是关键点?如果是,它的枚举值必须是什么?这在后台是如何工作的?对System.Diagnostics.Debug类和Debug定义的方法的ConditionalAttribute。如果编译时未定义调试预处理器
[ConditionalAttribute(“DEBUG”)]
。用于确定是否在编译时实际发出方法调用
如果条件属性表示未进行调用,则任何参数计算也将被忽略。下面是一个例子:
using System;
using System.Diagnostics;
class Test
{
static void Main()
{
Foo(Bar());
}
[Conditional("TEST")]
static void Foo(string x)
{
Console.WriteLine("Foo called");
}
static string Bar()
{
Console.WriteLine("Bar called");
return "";
}
}
定义测试时,将调用两种方法:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe
Bar called
Foo called
未定义测试时,也不调用测试:
c:\Users\Jon> csc Test.cs /d:TEST
c:\Users\Jon> test.exe