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我给出了一个示例,试图解释我正在尝试的内容