在C ++中,我们可以使用#ifdef在发布时消除一些调试语句。 C#与预处理器中的C ++不同。我仍然可以使用C ##if获得相同的结果。我们希望通过更改一个地方来消除所有调试语句,并且我们有几种不同类型的调试语句。可以有一个包含所有#ifdef标志的文件来打开或关闭那些调试语句吗?感谢
答案 0 :(得分:20)
您可以将代码打包在:
#if DEBUG
// debug only code
#endif
但是,我不建议这样做。它通常是一个更好的替代方法,只需创建一个方法并使用[Conditional("DEBUG")]
属性标记它。有关详细信息,请参阅Conditional on MSDN。这允许您只进行调试方法:
[Conditional("DEBUG")]
public void DebugPrint(string output) { // ...
}
然后,你可以正常调用它:
DebugPrint("Some message"); // This will be completely eliminated in release mode
答案 1 :(得分:4)
使用类似:
#if DEBUG
System.Console.WriteLine("This is debug line");
#endif
答案 2 :(得分:2)
使用#define创建的符号范围是定义它的文件。
因此,您无法拥有一个文件来定义整个程序中使用的其他几个定义。最简单的方法是在项目文件上使用不同的配置,并在命令行上为编译器指定每个配置的定义列表。
<强>更新强> 您可以通过右键单击项目并选择属性,在Visual Studio中设置项目定义。然后选择构建标签。通常,您可以在“条件编译符号”下指定要发送到编译器的定义。您可以使用Configuration Manager(Build-&gt; Configuration Manager)
定义不同的项目设置 更新2:
当指定“条件编译符号”时,Visual Studio在编译器的命令行上发出/define
(C#的csc.exe),您可以通过在构建项目时检查输出窗口来查看。来自MSDN docs for csc.exe
/ define选项具有相同的效果 使用#define预处理器 指令除了编译器 选项对于中的所有文件都有效 该项目。符号仍然定义 在源文件中直到#undef 源文件中的指令删除 定义。当你使用 / define选项,一个#undef指令 一个文件对其他来源没有影响 项目中的代码文件。
您可以使用由此创建的符号 选项#if,#else,#elif和 #endif有条件地编译源文件。