Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C如何使用if来为调试和发布提供不同的编译结果? 在C++中,我们可以使用IFDEF在发布时删除一些调试语句。C与预处理器中的C++不同。如果使用C,我还能得到同样的结果吗。我们希望通过更改一个位置来消除所有调试语句,并且我们有几种不同类型的调试语句。可以有一个包含所有ifdef标志的文件来打开或关闭那些调试语句吗?谢谢_C# - Fatal编程技术网

C# C如何使用if来为调试和发布提供不同的编译结果? 在C++中,我们可以使用IFDEF在发布时删除一些调试语句。C与预处理器中的C++不同。如果使用C,我还能得到同样的结果吗。我们希望通过更改一个位置来消除所有调试语句,并且我们有几种不同类型的调试语句。可以有一个包含所有ifdef标志的文件来打开或关闭那些调试语句吗?谢谢

C# C如何使用if来为调试和发布提供不同的编译结果? 在C++中,我们可以使用IFDEF在发布时删除一些调试语句。C与预处理器中的C++不同。如果使用C,我还能得到同样的结果吗。我们希望通过更改一个位置来消除所有调试语句,并且我们有几种不同类型的调试语句。可以有一个包含所有ifdef标志的文件来打开或关闭那些调试语句吗?谢谢,c#,C#,请使用以下方法: #if DEBUG System.Console.WriteLine("This is debug line"); #endif 您可以将代码包装为: #if DEBUG // debug only code #endif 但是,我不建议这样做。制作一个方法并用[ConditionalDEBUG]属性标记它通常是更好的选择。有关更多详细信息,请参阅。这允许您创建仅调试的方法: [Conditional("DEBUG")] public void DebugPrint

请使用以下方法:

#if DEBUG

System.Console.WriteLine("This is debug line");

#endif
您可以将代码包装为:

#if DEBUG

// debug only code

#endif
但是,我不建议这样做。制作一个方法并用[ConditionalDEBUG]属性标记它通常是更好的选择。有关更多详细信息,请参阅。这允许您创建仅调试的方法:

[Conditional("DEBUG")]
public void DebugPrint(string output) { // ... 
}
然后,您可以正常地将其称为:

DebugPrint("Some message"); // This will be completely eliminated in release mode
根据

使用“定义”创建的符号的范围是在其中定义符号的文件

因此,不能有一个文件定义了在整个程序中使用的几个其他定义。最简单的方法是在项目文件上有不同的配置,并在编译器的命令行上为每个配置指定定义列表

更新: 通过右键单击项目并选择“属性”,可以在Visual Studio中设置项目定义。然后选择Build选项卡。在“常规”下,可以在条件编译符号下指定要发送到编译器的定义。您可以使用Configuration Manager Build->Configuration Manager定义不同的项目设置

更新2: 指定条件编译符号后,Visual Studio会在编译器csc.exe for C的命令行上发出一个/define,您可以在构建项目时通过检查输出窗口看到这一点。从

/define选项具有相同的效果 就像使用define预处理器一样 指令,但编译器 选项对中的所有文件有效 这个项目。符号仍在定义中 在源文件中,直到未定义 源文件中的指令删除 定义。当你使用 /定义选项,在 一个文件对其他源没有影响 项目中的代码文件

您可以使用由此创建的符号 带有if、else、elif和 endif有条件地编译源文件


您可以根据配置在项目文件中定义编译常量。调试是默认定义的。您能告诉我有关最简单方法的更多详细信息吗?以这种方式设置的条件编译符号适用于该项目的所有文件?如果我们在类A中使用条件属性定义DebugPrint方法,那么我们在类B、类C和….中调用它。。。。。如果在编译时该条件为false,则不会编译所有调用该方法的语句?是。整个方法以及调用它的所有点将自动从最终IL中删除。在许多情况下,它比使用if-DEBUG更易于维护。