Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后处理和调试问题?_C#_.net_Visual Studio_Debugging_Postsharp - Fatal编程技术网

C# 后处理和调试问题?

C# 后处理和调试问题?,c#,.net,visual-studio,debugging,postsharp,C#,.net,Visual Studio,Debugging,Postsharp,我制作了一个非常简单的方面,并在调试时发现了一个问题(请参阅代码)。我在方法出口上设置了一个断点,它实际上击中了“entry”方法内部。PostSharp 1.5,Visual Studio 2008 SP1 这是一个已知的错误,有什么解决方法吗 class Program { [MyAspect] static void Main(string[] args) { Console.WriteLine("body"); } // setting b

我制作了一个非常简单的方面,并在调试时发现了一个问题(请参阅代码)。我在方法出口上设置了一个断点,它实际上击中了“entry”方法内部。PostSharp 1.5,Visual Studio 2008 SP1
这是一个已知的错误,有什么解决方法吗

class Program
{
    [MyAspect]
    static void Main(string[] args)
    {
        Console.WriteLine("body");
    } // setting breakpoint here
}

[Serializable]
class MyAspect : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    { // hits here actually! (debug mode)
        Console.WriteLine("entry"); // hits here actually! (release mode)
    }

    public override void OnExit(MethodExecutionEventArgs eventArgs)
    {
        Console.WriteLine("exit");
    }
}

当调试符号过期或与正在运行的可执行文件不匹配时,通常会发生这种情况

我使用PostSharp,以前从未见过这样的东西。。。你试过重建吗?或者删除输出文件夹,然后生成

编辑:

所以我查了你的样本。如果将
MyAspect
实现移动到另一个文件中,则在开始调试代码时,断点将不可用,并显示以下消息:“当前不会命中断点。没有与此行关联的可执行文件…”

如果没有应用方面,它就不会发生。所以,是的,看起来编译后步骤中的某些内容确实导致了问题

我将把这个答案留在这里,作为对问题的澄清。如果你认为它没有用,我也可以删除它

编辑2:
至于解决方法:将断点设置为前一行(不在右括号上),然后跨过方法中的最后一行代码…

这可能是PostSharp的错误。您可以向报告。

在搜索此问题的解决方案时,我偶然发现了此线程。我也有同样的问题,并且发现了一些问题

这似乎(我真的不知道)与构建过程中发生的事情的顺序有关。我的想法如下所示:构建/重建时会发生什么(在我的情况下,清理并不重要):

  • 生成程序集
  • 为他们创建.pdb
  • 再次构建,应用postsharp代码
  • .pdb不会再次创建(我猜!!)
这意味着:.pdb与正在调试的代码不匹配。我为什么这么想?如果我在组件上禁用postsharp,一切正常。启用时,简单的代码如下 “string str=“test”; 正如Nader Shirazie提到的“与可执行代码无关”,我不能同意

我仍然在寻找一个“真正的”解决方案。我目前的解决方案,禁用postsharp for the assembly,并不是很令人满意,因为我当然也想调试方面。 maybee这只是一个简单的设置。我无法想象像postsharp这样的工具会提高生产率和质量,使调试失败……有人吗


我可能错了,但我的情况就是这样。

这似乎是因为PostSharp的“注射”“编译项目时,将代码写入方法中,这样断点行和所有异常行号都会减少‘X’行数。您可以查看反编译的.dll,并查看PostSharp注入到您的代码库中的所有代码,这些代码导致.pdb文件与.dll不同步

重建/清理不会改变任何内容。您是否尝试过执行我的示例?这似乎是一个.pdb问题。PostSharp仅修改程序集,而不修改调试符号文件。通常,PostSharp还修改.pdb文件以匹配新的.dll。不同步问题可能是由错误或某些不兼容(例如.pdb格式的更改)引起的。