在发布模式下不编译方法的 .NET 属性是什么?

问题描述 投票:0回答:3

我知道,如果我有一个代码块,我不想在发布模式下编译,我可以将该代码块包装在:

#if DEBUG
   while(true)
{ Console.WriteLine("StackOverflow rules"); }
#endif

这将阻止此代码块在除

DEBUG
之外的任何模式下编译。

我知道有一个属性可以放置在整个方法上,它会执行相同的操作,但我一辈子都不记得该属性是什么。我相信它位于

System.Diagnostics
命名空间下,但我不太确定。

顺便说一句:我正在使用 .NET 4,但我知道这个属性存在于 .NET 2 中,因为我在旧项目中使用过。

谢谢

.net attributes
3个回答
5
投票

它是ConditionalAttribute

向编译器表明一个方法 应忽略调用或属性 除非指定条件 编译符号已定义。

您应该将其定义为

[Conditional("DEBUG")]
并确保 DEBUG 常量未在发布模式下定义。


1
投票

除了 ConditionalAttribute,您还可以简单地使用:

#if (!DEBUG) 

0
投票

使用 ConditionalAttribute 时,请记住它不能用于返回除 void 之外的任何内容或采用输出参数作为参数的函数。引用参数很好,因为该变量在方法调用之前实例化。

[Conditional("DEBUG")]
public void Success1(string param)

[Conditional("DEBUG")]
public void Success2(ref string param)

[Conditional("DEBUG")] // out parameter
public void CompileErrorCS0685(out string param)

[Conditional("DEBUG")] // non-void function
public bool CompileErrorCS0578(string param)
© www.soinside.com 2019 - 2024. All rights reserved.