当Debug.Assert()源代码中存在方法调用并且我在发布模式下编译时,编译器是否会生成IL,Debug.Assert()即使它没有被调用?
我们的一位开发人员最近添加了一个Assert,显示有关内部安全性的信息.有人可以查看发布模式IL并找出断言的文本吗?
它不是在默认情况下,除非你定义了DEBUG符号(和默认情况下,释放被关闭).
要进行验证,请打开"项目属性",然后在Visual Studio中选择"构建"窗格.它将显示"Define DEBUG constant"复选框.如果为Release打开它,则会触发断言; 否则,他们不会.
不,Debug类的成员(具有ConditionalAttribute属性)不会发出IL.有MSDN上没有明确提及,但以下两个引号暗示的行为相当不错,所以要增加罗伊的回答:
如果使用Debug类中的方法来打印调试信息并使用断言检查逻辑,则可以使代码更加健壮,而不会影响传送产品的性能和代码大小.
因此,没有任何尺寸差异意味着没有任何输出,并且
ConditionalAttribute属性应用于Debug的方法.除非将"DEBUG"定义为条件编译符号,否则支持ConditionalAttribute的编译器将忽略对这些方法的调用.请参阅编译器的文档以确定是否支持ConditionalAttribute以及定义条件编译符号的语法.
这意味着,在编译器级别,甚至不会考虑这些调用(何时DEBUG未定义).