3 回答
TA贡献1829条经验 获得超13个赞
删除#define DEBUG代码中的。在该特定构建的构建配置中设置预处理器(DEBUG / _DEBUG应该已经在VS中定义了)。
打印“ Mode = Debug”的原因是由于您的原因#define,然后跳过elif。
另外,正确的检查方法是:
#if DEBUG
Console.WriteLine("Mode=Debug");
#else
Console.WriteLine("Mode=Release");
#endif
不要检查发布
TA贡献1878条经验 获得超4个赞
默认情况下,如果项目是在Debug模式下编译的,则Visual Studio会定义DEBUG,而在Release模式下则不会定义它。默认情况下,未在发布模式下定义RELEASE。使用这样的东西:
#if DEBUG
// debug stuff goes here
#else
// release stuff goes here
#endif
如果您只想在发布模式下做某事:
#if !DEBUG
// release...
#endif
另外,值得指出的是,可以[Conditional("DEBUG")]在返回的方法上使用属性,void以使它们仅在定义了特定符号的情况下才执行。如果未定义符号,则编译器将删除对这些方法的所有调用:
[Conditional("DEBUG")]
void PrintLog() {
Console.WriteLine("Debug info");
}
void Test() {
PrintLog();
TA贡献1860条经验 获得超9个赞
我不是#if东西的忠实拥护者,特别是如果将其分散在代码库中,因为如果您不小心,它将在Debug生成通过的地方给您带来问题,但是Release生成会失败。
因此,这就是我的想法(受C#中的#ifdef启发):
public interface IDebuggingService
{
bool RunningInDebugMode();
}
public class DebuggingService : IDebuggingService
{
private bool debugging;
public bool RunningInDebugMode()
{
//#if DEBUG
//return true;
//#else
//return false;
//#endif
WellAreWe();
return debugging;
}
[Conditional("DEBUG")]
private void WellAreWe()
{
debugging = true;
}
}
- 3 回答
- 0 关注
- 507 浏览
添加回答
举报