公共语言运行库无法设置断点

use*_*412 28 .net c# clr visual-studio-2010 dynamics-crm-2011

这实际上是这个问题的另一部分.

错误设置断点但在调试时只在某些行上

我在vs 2010中远程调试CRM 2011插件.

我是我的一个源文件,我可以在整个代码中设置断点,除了在一些地方.

当我尝试设置断点时,我收到此错误"无法设置以下断点:"和"公共语言运行时无法设置断点".

protected override void ExecutePlugin()
{
    SetStateResponse response = new SetStateResponse(); // Breakpoint works

    // Message switch
    switch (_crmMessage) // Breakpoint error
    {
        case CrmPluginMessageEnum.Create:

        Entity pimage = null; // Breakpoint error
        if (_context.PostEntityImages.ContainsKey("postcreate")) // Breakpoint works
            pimage = _context.PostEntityImages["postcreate"]; // Breakpoint error

        break; // Breakpoint error
        }
} // Breakpoint error
Run Code Online (Sandbox Code Playgroud)

更新 此外,在模块窗口中,它将dll显示为已优化:无用户代码:是符号状态:符号已加载

Jos*_*ter 36

两种可能性,已经被其他答案引用:

  1. 确保使用程序集的Debug构建而不是Release构建,因为Release构建将删除或优化代码.
  2. 每次在Visual Studio中部署程序集时都要确保更新版本(在项目属性选项卡上).当您增加版本时,CRM将确保卸载旧的程序集版本并在不重置IIS的情况下重新加载新版本.


Ben*_*son 0

除了关于正在优化的 DLL 的更新之外,您所指出的断点不起作用的行可能会被优化掉,因为您的整个 switch 语句不会执行任何其他操作决定是否为从未使用过的变量分配值并且不会超出 switch 语句的范围。因此,编译器不会为 switch 语句生成任何代码,因为它根本不执行任何操作,或者 jit 只是出于同样的原因在运行时删除它。