我在VS 2010 C#中创建了一个Windows应用程序。它是一个Web爬虫应用程序并使用 N层应用程序结构(一个Windows应用程序和许多类库 项目)。上周我在所有项目中实现了一个Log系统,用于创建日志文本 解决性能问题。但现在我想在发布模式下禁用此日志功能。
我用Google搜索并从CodeProject获取示例。请参阅下面的代码。
public class ModeDetector
{
public virtual bool IsDebug
{
get
{
bool isDebug = false;
#if (DEBUG)
isDebug = true;
#else
isDebug = false;
#endif
return isDebug;
}
}
public bool IsRelease
{
get { return !IsDebug; }
}
}
我在基类库中创建了这个类。获取此类供所有参考 项目。我在我的Windows应用程序中调用此方法。像
if (new Sun.lib.ModeDetector().IsDebug)
MessageBox.Show("Debug Mode");
else
MessageBox.Show("Release Mode");
并将我的项目Build Configuration更改为“Release”。但是这段代码总是显示“调试模式”消息。但是当我在我的Windows应用程序中创建这个类时,它的工作正常。但我太担心在每个项目中创建这个类。
请告诉我确定项目工作调试或发布模式的最佳做法是什么。我如何在整个项目中使用此类。
编辑:
我在类库项目的Debug bug文件夹中引用类库。
我的类库和win表单应用程序都在相同的解决方案上。
答案 0 :(得分:1)
每个库设置DEBUG
标志,而不是每个解决方案。您需要在解决方案中使用的每个库中设置(或删除)该标志。
答案 1 :(得分:1)
您很可能尝试重新创建类似于Debug.XXXX
方法中使用的条件属性。如果未定义给定符号,Conditional attributes允许方法调用no-op。
即。查看调试版本中跟踪的Debug.Write方法(定义{{1}}时)和发布版中的no-op:
DEBUG
请注意,您将无法实现所需的虚函数,因为具有条件属性的方法将根据条件符号调用或不调用,但方法内部的代码不会发生变化。
[ConditionalAttribute("DEBUG")]
public static void Write(Object value)
更改将编译的代码。编译的DLL只有一个分支(匹配条件)。
您需要在发布和调试版本中引用匹配的库。如果您对所有项目使用单一解决方案,它将自动设置,如果您有单独的解决方案,我相信您需要手动编辑“.csproj”文件,以根据定义包含库的不同版本。
答案 2 :(得分:0)
谢谢Marcus。我按照你的指示重写我的代码,如:
#if (DEBUG)
MessageBox.Show("Debug Mode");
#else
MessageBox.Show("Release Mode");
#endif