我可以阻止CLR优化掉调试信息吗?

Ryt*_*mis 7 .net c# debugging clr optimization

我为单元测试编写了一个抽象基类,它为我们的测试运行设置了足够的环境.该类将一些运行时环境位公开为属性,其类型因test而异(属性类型是继承的具体测试类中指定的类型参数).

这一切都很好,除了一位同事发现他无法在调试器中查看任何类的属性.事实证明,他的继承类中没有定义任何字段,并且CLR优化了某些东西,因此调试器无法显示属性.是否有可能以某种方式在基类中阻止这种情况,或者我是否必须告诉每个人他们需要定义至少一个在测试期间某处使用的字段?

编辑:

听起来像一个可能的罪魁祸首应该是优化/调试设置.也就是说,我正在调试模式下从Visual Studio构建应用程序,我已经仔细检查了所有项目都是为调试版本设置的,并且此解决方案中的所有项目都没有设置Optimize标志.

也许有必要注意我正在使用MSTest和Visual Studio测试运行器.

编辑2:

通过"无法查看属性"我指的是当我在Quickwatch中评估属性并获得红色感叹号和文本"无法评估表达式"错误文本时.并且为了避免你认为我完全偏离我的怀疑,添加一个在测试初始化​​方法中初始化的实例字段会使问题消失......

编辑3:

检查构建输出.我注意到使用以下选项调用编译器:

/debug+
/debug:full
/optimize-
/define:DEBUG,TRACE
Run Code Online (Sandbox Code Playgroud)

我认为这足以阻止这种情况的发生,但是你去了.:)

Nol*_*rin 7

我以前遇到过同样的问题,而且总是由于Debug模式已经以某种方式关闭了.请尝试检查以下各项:

  1. 解决方案和适当项目的当前构建配置是Debug.
  2. 在属性页的" 构建"选项卡中,取消选中 " 优化代码"复选框.

如果这一切都正确,那么我建议您将写入的文本粘贴到" 输出"窗口,这样我们就可以发现问题的任何不寻常原因.

  • 这听起来很可能,但活动配置是调试,配置为所有项目显示“调试”,并且未设置类所在程序集的“优化”标志。不幸的是,我实际上无法在此处粘贴任何内容(不同的机器),也不允许这样做。我应该寻找什么具体的东西? (2认同)