1

我在 VS 2010 C# 中创建了一个 Windows 应用程序。它是一个网络爬虫应用程序,使用 N 层应用程序结构(本项目中有一个 Windows 应用程序和许多类库)。上周我在所有项目中实现了一个日志系统,用于创建日志文本以解决性能问题。但现在我想在发布模式下禁用此日志功能。

我用谷歌搜索并从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");

并将我的项目构建配置更改为“发布”。但是这段代码总是显示“调试模式”消息。但是当我在我的 Windows 应用程序中创建这个类时,它工作正常。但是我太担心在每个项目中创建这个类。

请告诉我确定项目是工作调试还是发布模式的最佳实践是什么。我如何在整个项目中使用这个类。

编辑:

我在类库项目的Debug bug文件夹中引用了类库。

我的类库和 win 表单应用程序位于相同的解决方案上。

4

3 回答 3

1

DEBUG标志是按库设置的,而不是按解决方案设置的。您需要在解决方案中使用的每个库中设置(或删除)该标志。

于 2013-08-15T08:03:13.840 回答
1

很可能您试图重新发明类似于Debug.XXXX方法中使用的条件属性。如果未定义给定符号,条件属性允许方法调用无操作。

即查看在调试构建中跟踪的Debug.WriteDEBUG方法(何时定义)和发布中的无操作:

[ConditionalAttribute("DEBUG")]
public static void Write(Object value)

请注意,您将无法实现所需的虚函数,因为将根据条件符号调用或不调用具有条件属性的方法,但方法内部的代码不会改变。

#if更改将编译的代码。编译后的 DLL 将只有一个分支(匹配条件)。

您需要在发布和调试版本中引用匹配的库。如果您为所有项目使用单一解决方案,它将自动设置,如果您有单独的解决方案,我相信您需要手动编辑“.csproj”文件以根据定义包含不同版本的库。

于 2013-08-15T08:07:24.820 回答
0

谢谢 马库斯。我按照您的指示重写我的代码,例如:

#if (DEBUG) 

    MessageBox.Show("Debug Mode");

#else

    MessageBox.Show("Release Mode");

#endif
于 2013-08-15T11:19:04.610 回答