C# 基于调用者有条件地调用私有方法';s调试配置

C# 基于调用者有条件地调用私有方法';s调试配置,c#,mef,C#,Mef,我当前的代码情况是,我在程序集中有以下代码: public class Foo { public Foo() { CreateDebugMessage(); } [Conditional("DEBUG")] [DebuggerStepThrough] private void CreateDebugMessage() { AddMessageType(MessageType.Debug, "Debug",

我当前的代码情况是,我在程序集中有以下代码:

public class Foo
{
    public Foo()
    {
        CreateDebugMessage();
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    private void CreateDebugMessage()
    {
        AddMessageType(MessageType.Debug, "Debug",
            "/Company.App.Class;component/Images/image.png", Brushes.Green, false);
    }
}
一些额外的信息是,我正在使用MEF,这个方法是从构造函数调用的。我有一个程序集B(我在其中导入程序集A),这取决于我是处于调试模式还是发布模式,我希望在实例化类时创建调试消息:

var foo = new Foo();
如果我处于调试模式,我希望创建调试消息。 如果我处于发布模式,我不希望创建调试消息

我认为条件属性比#iF DEBUG语句更好。让我知道我错了!因为在运行时从未到达该方法

此时,我明白“#iF Debug”和“[Conditional(“Debug”)]”语句并不能满足我的目标


因此,我的问题是,如何使该场景正常工作?

该属性按其应有的方式工作,请参阅。该属性取决于调用程序集的编译符号。我测试并确认了这一点:只有在调试中编译调用程序集时,才会调用发布时编译的程序集中具有
[Conditional(“DEBUG”)]
的方法。如果您的情况不是这样,则代码与描述不匹配

你问题中的相关部分当然是“这个方法是从构造函数调用的。”。该属性适用于直接调用方,在您的情况下,该调用方是包含类的构造函数,即Release

您必须将其公开并显式调用该方法:

public class Foo
{
    public Foo()
    {           
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    public void CreateDebugMessage()
    {
        AddMessageType(MessageType.Debug, "Debug",
            "/Company.App.Class;component/Images/image.png", Brushes.Green, false);
    }
}

var foo = new Foo();
foo.CreateDebugMessage();

该属性按其应有的方式工作,请参见。该属性取决于调用程序集的编译符号。我测试并确认了这一点:只有在调试中编译调用程序集时,才会调用发布时编译的程序集中具有
[Conditional(“DEBUG”)]
的方法。如果您的情况不是这样,则代码与描述不匹配

你问题中的相关部分当然是“这个方法是从构造函数调用的。”。该属性适用于直接调用方,在您的情况下,该调用方是包含类的构造函数,即Release

您必须将其公开并显式调用该方法:

public class Foo
{
    public Foo()
    {           
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    public void CreateDebugMessage()
    {
        AddMessageType(MessageType.Debug, "Debug",
            "/Company.App.Class;component/Images/image.png", Brushes.Green, false);
    }
}

var foo = new Foo();
foo.CreateDebugMessage();

该属性按其应有的方式工作,请参见。该属性取决于调用程序集的编译符号。我测试并确认了这一点:只有在调试中编译调用程序集时,才会调用发布时编译的程序集中具有
[Conditional(“DEBUG”)]
的方法。如果您的情况不是这样,则代码与描述不匹配

你问题中的相关部分当然是“这个方法是从构造函数调用的。”。该属性适用于直接调用方,在您的情况下,该调用方是包含类的构造函数,即Release

您必须将其公开并显式调用该方法:

public class Foo
{
    public Foo()
    {           
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    public void CreateDebugMessage()
    {
        AddMessageType(MessageType.Debug, "Debug",
            "/Company.App.Class;component/Images/image.png", Brushes.Green, false);
    }
}

var foo = new Foo();
foo.CreateDebugMessage();

该属性按其应有的方式工作,请参见。该属性取决于调用程序集的编译符号。我测试并确认了这一点:只有在调试中编译调用程序集时,才会调用发布时编译的程序集中具有
[Conditional(“DEBUG”)]
的方法。如果您的情况不是这样,则代码与描述不匹配

你问题中的相关部分当然是“这个方法是从构造函数调用的。”。该属性适用于直接调用方,在您的情况下,该调用方是包含类的构造函数,即Release

您必须将其公开并显式调用该方法:

public class Foo
{
    public Foo()
    {           
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    public void CreateDebugMessage()
    {
        AddMessageType(MessageType.Debug, "Debug",
            "/Company.App.Class;component/Images/image.png", Brushes.Green, false);
    }
}

var foo = new Foo();
foo.CreateDebugMessage();

什么情况?你想发生什么?它应该运行还是不应该运行?您链接的问题已经有一个示例,为什么需要新的?@Default我想从程序集B中的代码运行CreateDebugMessage中的代码。我遇到的问题是,由于条件属性,它从未到达。然而,我只需要在程序集B处于调试状态时运行该方法。@VMAtm我正在给出一个示例,试图解释我要做的事情。我发现#iF DEBUG和Conditional属性可能不是正确的方法。不知道该怎么办,什么情况?你想发生什么?它应该运行还是不应该运行?您链接的问题已经有一个示例,为什么需要新的?@Default我想从程序集B中的代码运行CreateDebugMessage中的代码。我遇到的问题是,由于条件属性,它从未到达。然而,我只需要在程序集B处于调试状态时运行该方法。@VMAtm我正在给出一个示例,试图解释我要做的事情。我发现#iF DEBUG和Conditional属性可能不是正确的方法。不知道该怎么办,什么情况?你想发生什么?它应该运行还是不应该运行?您链接的问题已经有一个示例,为什么需要新的?@Default我想从程序集B中的代码运行CreateDebugMessage中的代码。我遇到的问题是,由于条件属性,它从未到达。然而,我只需要在程序集B处于调试状态时运行该方法。@VMAtm我正在给出一个示例,试图解释我要做的事情。我发现#iF DEBUG和Conditional属性可能不是正确的方法。不知道该怎么办,什么情况?你想发生什么?它应该运行还是不应该运行?您链接的问题已经有一个示例,为什么需要新的?@Default我想从程序集B中的代码运行CreateDebugMessage中的代码。我遇到的问题是,由于条件属性,它从未到达。尽管如此,我只需要在程序集B处于调试状态时运行该方法。@VMAtm我给出了一个示例,试图解释我正在尝试的内容