C# 无法获取值,因为它已被优化

C# 无法获取值,因为它已被优化,c#,.net,debugging,clr,C#,.net,Debugging,Clr,我在调试方面有问题。。。 在调试时,我突然看不到大多数变量的值。 我已设法在即时窗口中获得两条不同的消息: 无法获取局部参数或参数“parameter”的值,因为它在此指令指针上不可用,可能是因为它已被优化 及 表达式计算器中存在内部错误 我尝试并检查了以下事项: 解决方案配置设置为调试(非发布) 项目->设置->构建->优化代码未设置 工具->选项->调试->使用管理兼容模式(不工作) 您对如何再次正确调试有什么进一步的想法吗( 提前谢谢 编辑 代码没什么特别的..当我试图观察参数[Key]中

我在调试方面有问题。。。 在调试时,我突然看不到大多数变量的值。 我已设法在即时窗口中获得两条不同的消息:

无法获取局部参数或参数“parameter”的值,因为它在此指令指针上不可用,可能是因为它已被优化

表达式计算器中存在内部错误

我尝试并检查了以下事项:

  • 解决方案配置设置为调试(发布)
  • 项目->设置->构建->优化代码未设置
  • 工具->选项->调试->使用管理兼容模式(不工作)
  • 您对如何再次正确调试有什么进一步的想法吗(

    提前谢谢

    编辑 代码没什么特别的..当我试图观察参数[Key]中的内容时会发生这种情况

    public void AddOrUpdateQuartzJob(string jobName, IList<KeyValuePair<string, string>> parameters)
        {
            var jobDetail = this.GetJobDetail(jobName);
    
            if (jobDetail != null)
            {
                foreach (var parameter in parameters)
                {
                    jobDetail.JobDataMap[parameter.Key] = parameter.Value;
                }
            }
            else
            {
                this.ScheduleNewJob(jobName, parameters);
            }
        }
    
    public void AddOrUpdateQuartzJob(字符串jobName,IList参数)
    {
    var jobDetail=this.GetJobDetail(jobName);
    if(作业详细信息!=null)
    {
    foreach(参数中的var参数)
    {
    jobDetail.JobDataMap[parameter.Key]=parameter.Value;
    }
    }
    其他的
    {
    this.ScheduleNewJob(作业名称、参数);
    }
    }
    
    我发现的最好的方法是:

    请注意,它必须是程序集的名称,而不是进程EXE的名称(除非它是您要调试的EXE程序集)。例如,如果您有一个程序集
    MyCode.dll
    ,INI文件名将是
    MyCode.INI

    以下是一些幻灯片,展示了不同之处:

    优化:

    无需优化:


    转到->项目属性->正在生成->未选中“优化代码”复选框

    而且,
    在项目属性->构建->高级->下,将“调试信息”下拉列表设置为“完整”在codekaizen和isanka thalagala列出的选项中,在进行更改后,不要忘记清理、重建和发布以使更改生效。

    对于其他对此感到困惑的人,你可能犯了与我相同的简单错误:我的构建模式设置为从另一个项目发布,我必须在之前构建发布当天。将其翻转回调试;问题已解决。

    您可以共享代码吗?是的,当您处于“if(jobDetail!=null)”状态时,我已编辑了原始帖子。崩溃前参数中有什么内容?我甚至看不到参数中有什么内容。。您尝试添加“if(parameters!=null)”时会出现相同的消息在for each之前?我尝试了数百种其他方法。这种方法很有效。很奇怪,但谢谢。我发现以下方法在不为每个项目创建文件的情况下都有效。在Visual Studio(2019)中,在工具菜单下,选项->调试->常规->确保“在模块加载时抑制JIT优化(仅受管理)”已选中。@SteveB-是的,这有时有效,但由于某些原因并非始终有效。我的“活动”但是,配置设置为Release。它未在visual studio UI中显示。当我从配置管理器更改时,它已修复。我从其他人处获取了此项目,因此不知道为什么会这样设置。当activemode设置为Debug和“优化代码”时,也会出现此问题已为调试选择设置。@isanka thalagala发布了一个解决此常见“误点击”问题的答案
    [.NET Framework Debugging Control]
    GenerateTrackingInfo=1
    AllowOptimize=0