C#预编译指令
近日工作涉及到于外部系统交互,对方提供接口;但是在双方系统未联调时,引用外部DLL,相关类实例化,提示异常错误(错误消息正常);后面操作无法进行,那如何写调试代码,即在调试时不运行某段代码,而在正式发布时,运行该部分程序。
分析:
为避免在调试过程中,避免异常错误,导致程序无法正常运行(主要是针对真实环境未提供),例如需要硬件驱动;需要一个标识,告诉程序执行某段代码。
方案:
1、在config文件中加入配置项,根据不同的配置值来执行程序某段代码
2、采用预编译指令,当程序在debug时,执行那部分代码;在RELEASE时,执行某部分代码
比较:
第一种方案的需要用户配置文件,添加维护工作量;第二种相对灵活,但是在交付版本时,注意区分是DEBUG还是RELEASE
关于预编译指令的官方解释在http://msdn.microsoft.com/zh-cn/library/ed8yd1ha.aspx
使用 #define 定义符号。 当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 true,如下例所示: # define DEBUG
项目中具体应用
#define RELEASE using System; #if DEBUG HiddenDebugContrl(false); #elif RELEASE m_service = new RFIDGateService(); m_service.CheckedItemEpcRaised += new RFIDGateService.ItemCheckedEvent(m_service_CheckedItemEpcRaised); m_service.SessionEndCheckedRaised += new RFIDGateService.SessionEndCheckedEvent(m_service_SessionEndCheckedRaised); HiddenDebugContrl(true); #else #endif
注:C#在Debug状态下自动定义DEBUG标志,但Release状态不会自动定义RELEASE标志,故需要在开头定义#define RELEASE。