C# #如果(调试)在自定义基类库中不起作用

C# #如果(调试)在自定义基类库中不起作用,c#,.net,windows,winforms,.net-assembly,C#,.net,Windows,Winforms,.net Assembly,我在VS 2010 C#中创建了一个Windows应用程序。它是一个web爬虫应用程序,使用 N层应用程序结构(此应用程序中有一个Windows应用程序和多个类库 项目)。上周,我在所有项目中实现了一个日志系统,用于为创建日志文本 解决性能问题。但是现在我想在发布模式下禁用这个日志函数 我在谷歌上搜索,从中得到了一个例子。请看下面我的代码 public class ModeDetector { public virtual bool IsDebug { get

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

我在谷歌上搜索,从中得到了一个例子。请看下面我的代码

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 forms应用程序位于相同的解决方案上。

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

您很可能试图重新创建与调试.XXXX方法中使用的类似的条件属性。如果未定义给定符号,则允许进行无操作的方法调用

也就是说,查看在调试构建中跟踪的方法(当定义了
debug
时),并且在发布中没有操作:

[ConditionalAttribute("DEBUG")]
public static void Write(Object value)
请注意,您将无法实现所需的虚拟函数,因为将调用或不调用具有条件属性的方法,这取决于条件符号,但方法内部的代码不会变化

#如果
更改了将编译的代码。编译的DLL将只有一个分支(与条件匹配)

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

谢谢。我按照您的指示重写代码,如下所示:

#if (DEBUG) 

    MessageBox.Show("Debug Mode");

#else

    MessageBox.Show("Release Mode");

#endif

为什么不使用pragma条件而不是实现自己的类呢#if(DEBUG)MessageBox.Show(“调试模式”)#在我看来,您正在使用项目发布版本中此库的调试版本。仅当库位于同一解决方案中且您更改了解决方案的配置时,此操作才有效。感谢您宝贵的回复。我在同一个解决方案中使用类库。但是我在bin/Debug/MyClasslib.dll中引用了这个类库。这就是这个问题的原因?谢谢你有价值的回答。@RageshPuthiyedath谢谢你的赞赏。如果某个答案对你有帮助,请投票表决,或将其标记为答案。这是说“谢谢”的方式。另见。