我正在编写一个应用程序,其中我有一些我不想删除的 debug 代码,但我希望在编译发布/发布时修改或删除它。例如,我想在调试版本中使用这样的东西:
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
...在发布版本中成为这个:
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
理想情况下,我希望做到这样的事情:
#if DEBUG_BUILD
MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
#else
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
#endif
每次更改构建类型时,我宁愿不必在项目属性中添加/删除条件编译符号;它应该自动发生。有没有办法在Microsoft Visual C#2008 Express Edition中执行此操作?感谢。
答案 0 :(得分:15)
使用:
#if DEBUG
// Debug work here
#else
// Release work here
#endif
如果你这样做,只需确保在属性页面(项目属性的构建页面)中打开“定义DEBUG常量”切换,它就可以工作。对于新的C#项目,默认情况下设置为true。将为您(默认情况下)为C#编译器定义DEBUG
。
答案 1 :(得分:14)
您也可以使用此属性。
[Conditional("DEBUG")]
这比预处理器指令有一些优势。
如果未定义条件符号,则对标记为条件的方法的所有调用都将替换为Nops,这样您就不必修改对它的所有调用。
即使未定义符号,您的代码也会检查错误。 (与使用#if DEBUG
时不同,#else
忽略编译期间{{1}}中的代码)
答案 2 :(得分:1)
您可以使用一个类来编写调试语句 namespace:system.diagnostics Debug.Assert是你想要使用的
http://msdn.microsoft.com/en-us/library/system.diagnostics.debug.assert.aspx
另请参阅Debug类以进行所有调试: http://msdn.microsoft.com/en-us/library/6x31ezs1.aspx
答案 3 :(得分:0)
您可以编写一个包含条件的扩展方法,这样您就不必每次都重复它了
public static class ExceptionExtensions
{
public static String ToMyString(this Exception ex)
{
#if DEBUG
return ex.ToString();
#else
return ex.Message;
#endif
}
}
这就是我要去做的事情
然后你的代码行将是
MessageBox.Show(ex.ToMyString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
应该定义DEBUG
答案 4 :(得分:0)
我不知道快递版是否有此功能,但Visual Studio已经在C#中内置了这个版本。
在您的工具栏中,您肯定有下拉列表,让您(默认情况下)在调试和发布版本之间进行选择,调试版本定义DEBUG符号,以便您可以使用:
#ifdef DEBUG
// debug code
#endif