Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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 2010_Clr_Dynamics Crm 2011 - Fatal编程技术网

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

C# 公共语言运行库无法设置断点,c#,.net,visual-studio-2010,clr,dynamics-crm-2011,C#,.net,Visual Studio 2010,Clr,Dynamics Crm 2011,这实际上是这个问题的另一部分 我正在VS2010中远程调试CRM 2011插件 在我的一个源文件中,我可以在整个代码中设置断点,除了少数地方 当我试图设置断点时,我得到了这个错误 无法设置以下断点:“和”公共语言运行库无法设置断点 更新 也,在“模块”窗口中,它将dll显示为已优化:无用户代码:是符号状态:加载的符号在更新后关于正在优化的dll您所指示的断点不起作用的行可能会被优化掉,因为您的整个switch语句不做任何其他事情来决定是否分配值一个从未使用过且不超出switch语句范围的变量。

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

我正在VS2010中远程调试CRM 2011插件

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

当我试图设置断点时,我得到了这个错误 无法设置以下断点:“和”公共语言运行库无法设置断点

更新
也,在“模块”窗口中,它将dll显示为已优化:无用户代码:是符号状态:加载的符号在更新后关于正在优化的dll您所指示的断点不起作用的行可能会被优化掉,因为您的整个switch语句不做任何其他事情来决定是否分配值一个从未使用过且不超出switch语句范围的变量。因此,编译器不会为switch语句生成任何代码,因为它根本不做任何事情,或者jit只是出于同样的原因在运行时将其删除。

当我在Visual Studio的两个实例中打开项目时,我也遇到了同样的问题。我未调试的项目锁定了该文件,并通知我“此文件已在源代码编辑器之外修改”。在接受非调试解决方案中的更改后,我不再收到错误,并且我正在调试的解决方案中的断点被击中


听起来这个错误有很多可能的原因,但这对我来说的确如此。

我也有过类似的经历,我的工作方式是在调用例程的位置设置一个断点,然后单步进入例程,直到我完全看到它认为它在做什么。在我的例子中,有一个返回阻止了例程中所有代码的运行,因此优化器将其全部抛出。有时候是愚蠢的事情,对吧?无论如何,如果您从调用堆栈的更高级别开始,并进入问题所在的例程,那么问题的原因可能会变得更加明显。

如果您针对CRM进行调试,我刚刚发现的另一个问题原因是没有更新插件注册点。即使您将新DLL复制到目标计算机并远程连接到CRM将使用的DLL以外的进程。CRM将尝试从其数据库中获取旧版本的副本,直到您重新运行插件注册


这个错误浪费了我一天半的时间

其他答案已经提到了两种可能性:

  • 确保使用的是程序集的调试生成,而不是 发布版本,因为发布版本将删除或优化 你的密码
  • 确保每次更新时都在更新版本 在Visual Studio中部署程序集(在“项目属性”选项卡上)。 当您增加版本时,CRM将确保卸载旧版本 程序集版本,并在不重置IIS的情况下重新加载新版本

  • 我在开始运行调试项目时遇到此错误,我通过清除所有项目并重新生成所有项目来解决此问题,在重新生成错误消失后。

    我在使用
    Ctrl+B
    快捷方式创建断点时遇到此问题(请参见附图),我输入了一个不存在的函数名,因此,添加了断点,但导致了错误。然后每次我开始这个项目的时候都会出现这个错误

    解决方案: 我从断点列表中删除了断点(请参见所附图片中的左下角),选择断点部分,然后选择项目并单击删除

    如果您没有看到断点部分


    您可以通过点击
    Ctrl+Alt+B

    来检索它。请添加您的代码!在很多情况下(例如lambda表达式、没有初始化的变量声明),您无法正常设置断点。当它说“无法设置以下断点”时,您试图将断点设置为不编译为任何实际代码的位置,例如在变量声明上或仅在空白处。显示无法设置断点的确切代码行。如果正在进行远程调试,是否可能是PDB文件与已编译的DLL不同步?您是否尝试过删除bin和obj文件并重新编译?您是否100%确定DLL与源代码匹配,是否正确部署了插件,某些断点正常工作,而其他断点不表示DLL已过期,或者可能未更新符号文件。正确。通过反射器,它显示它被转换为一个if语句。e男孩,非常感谢你,我太愚蠢了((带着这个狗屎,我坐了大约2个小时…非常感谢你
    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