在我看到的所有关于#if编译器指令的例子中,它们都使用了“DEBUG”。我可以以同样的方式使用“RELEASE”来排除在调试模式下编译时不想运行的代码吗?我想用这个块包围的代码会发送一堆电子邮件,我不想在测试时意外地发送这些邮件。
当前回答
虽然M4N的答案(#if (!DEBUG))最有意义,但另一种选择可能是使用预处理器来修改其他标志的值;如。
bool isRelease = true;
#if DEBUG
isRelease = false;
#endif
或者更好的方法是,使用定义预期行为的标志,并根据模式设置它们,而不是引用我们是在发布模式还是调试模式:
bool sendEmails = true;
#if DEBUG
sendEmails = false;
#endif
这与使用预处理器标志是不同的,因为这些标志在生产中仍然存在,所以每次调用该代码时,您都会产生if (sendEmails) {/* send邮件*/}的开销,而不是在发布版中存在但在调试中不存在的代码,但这可能是有利的;例如,在你的测试中,你可能想要调用你的SendEmails()方法,但在模拟上,同时在调试中运行以获得额外的输出。
其他回答
另一个选择:
#If CONFIG = "Release" Then
....
#End If
“流行卡特林”说对了。基于构建类型控制定义提供了很大的灵活性。例如,您可以在同一个解决方案中拥有“DEBUG”、“DEMO”和“RELEASE”配置。这避免了使用两个不同的解决方案进行重复编程的需要。
因此,当定义RELEASE条件编译符号时,#if RELEASE或#if (RELEASE)的工作原理与#if DEBUG相同。
以下是来自“Pop Catalin”的帖子: 如果你想为发布配置定义一个RELEASE常量,请到: *项目属性->构建 *选择释放模式 *在条件编译符号文本框中输入:RELEASE
我以前从来没见过……但我已经看到:
#if (DEBUG == FALSE)
and
#if (!DEBUG)
对你有用吗?
为此,您可以使用#if(!DEBUG)。
您可以创建自己的条件编译时符号(任何您喜欢的名称)。 进入“项目构建对话框”,位于项目属性框中, 菜单选项:Project->[projectname]属性…
你也可以在c#代码文件的顶部定义它们。如:
#define RELEASE
// or
#undef RELEASE
你可以在#if语句中使用该符号:
#if RELEASE
// code ...
#elif …
// code ...
#endif
// or
#if !RELEASE
// code ...
#endif
推荐文章
- c# XML文档网站链接
- 如何从日期时间获得完整的月份名称
- 在c#中创建一个对象的副本
- 通过字符串获取c#动态属性的值
- 我如何检查一个数字是正的或负的c# ?
- 无法找到testhost.dll。请发布测试项目并重试
- 什么是indexoutofraneexception / argumentoutofraneexception,我如何修复它?
- DbEntityValidationException -我如何容易地告诉是什么导致了错误?
- 嵌套等待平行。ForEach
- 我如何执行插入和返回插入的身份与Dapper?
- 如何从c#窗体返回一个值?
- 转换JSON字符串到c#对象
- Try /catch +使用,语法正确
- 无法找到适合特定区域性或中性区域性的任何资源
- .Net HttpWebRequest.GetResponse()在返回http状态码400(坏请求)时引发异常