C# 使用Rhino ETL显示在“调试器局部变量”窗格中的内部编译器变量

C# 使用Rhino ETL显示在“调试器局部变量”窗格中的内部编译器变量,c#,debugging,rhino-etl,C#,Debugging,Rhino Etl,如果反汇编C#,您经常会看到编译器插入的临时变量,其名称如下: CS$1$0000 但是什么会导致它们出现在调试器本地/自动窗格中 我的一个同事正在尝试维护一个使用。调试器将报告其程序集的符号已正确加载。他可以逐级检查代码。但是它没有在调试器中显示他的变量,而是只显示内部编译器生成的变量 我建议他尝试用中相同的代码编写一个新的控制台应用程序,并替换名为AbstractOperation和Row的伪类,以满足编译器的要求(这些类来自Rhino ETL库)。当他尝试删除对Rhino ETL的所有依

如果反汇编C#,您经常会看到编译器插入的临时变量,其名称如下:

CS$1$0000
但是什么会导致它们出现在调试器本地/自动窗格中

我的一个同事正在尝试维护一个使用。调试器将报告其程序集的符号已正确加载。他可以逐级检查代码。但是它没有在调试器中显示他的变量,而是只显示内部编译器生成的变量

我建议他尝试用中相同的代码编写一个新的控制台应用程序,并替换名为
AbstractOperation
Row
的伪类,以满足编译器的要求(这些类来自Rhino ETL库)。当他尝试删除对Rhino ETL的所有依赖时,一切都恢复正常,在调试器中看到了自己的变量

他还尝试用相同的解决方案从源代码构建Rhino ETL,但这并没有解决问题。显然这不是因为版本不兼容

他的代码位于迭代器方法中,因此编译器需要对代码进行重大重组。但是迭代器方法通常不会破坏调试器

在这种情况下,如果调试器是
重写
迭代器方法,并且基类是Rhino ETL库中的
抽象操作
,那么它似乎会破坏调试器


基类如何能对调试器产生这样的影响?

显然,PostSharp也参与其中,它重写了IL,当对PostSharp的依赖关系被删除时,问题就消失了。谜团解开了