C# - Visual Studio 2008能够进行条件编译吗?

Cha*_*eus 5 c# debugging projects-and-solutions build visual-studio

参考Build菜单下的"Configuration Manager",

有没有办法评论我的C#代码,以便在解决方案处于调试模式时注释掉的代码不会编译,但如果我将其更改为Release模式,则会编译?

我为什么要这个?我想要在Release模式下编译而不是在Debug中编译的代码的原因是我有一些代码无法从我的开发PC(从我的主机发送电子邮件的代码等)中起作用.

我不希望在发布之前运行我的代码并取消注释行,而是希望它是自动的.

Blu*_*kMN 10

你在找这样的东西吗?

#if DEBUG
     Console.WriteLine("Debug Mode");
#else
     Console.WriteLine("Release Mode");
#endif
Run Code Online (Sandbox Code Playgroud)

如果您只关心发布模式,可以使用:

#if !DEBUG
     Console.WriteLine("Release Mode");
#endif
Run Code Online (Sandbox Code Playgroud)

  • 我会说同样的问题适用于我的解决方案.我不推荐它.我建议整体看问题,看看是否有其他方法可以解决更大的问题.有很多#if语句或条件属性乱丢你的代码是一种可靠的方法,可以为任何维护程序员(甚至你自己在几个月的时间内创建很多混乱!) (2认同)
  • 为什么假设DEBUG符号被错误使用?默认情况下,它会添加到每个项目中,并且框架可以使用它,因此当然可以使用它.我觉得有点不寻常的是你只能在发布模式而不是调试模式下编译一些代码(通常是相反的方式),但是在发布模式和调试模式之间编译不同的代码是环境的有意和有用的特性. (2认同)
  • 我理解预订.在这种情况下,我只会有几个用途.只有几行代码试图从我的主机发送电子邮件 - 这在我的开发箱中无效.只是不想在发布之前通过我的代码运行以取消注释.谢谢! (2认同)

Col*_*kay 10

为此,您可以在方法(但不是单独的代码行)上使用Conditional属性

例如,以下内容仅编译为DEBUG版本.

[Conditional("DEBUG")]
public void MyMethod()
{
    // Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

DEBUG符号已在项目设置中指定.你必须为发布版本创建自己的符号,比如"RELEASE",这样你就可以这样做:

[Conditional("RELEASE")]
public void MyMethod()
{
    // Do Stuff
}
Run Code Online (Sandbox Code Playgroud)

但是,我建议退一步,从更高的层次重新审视你的问题,因为我不会真的推荐这个解决方案.