【问题标题】:Visual Studio Watch window not taking into account usingsVisual Studio Watch 窗口未考虑使用
【发布时间】:2012-03-18 13:24:31
【问题描述】:

我在视图模型中有以下代码:

public Point Location
{
    get
    {
        var rangePixels = Range * PixelsPerMile;
        var xCoordinate = OwnLocation.X * MapScale + rangePixels * Math.Cos(Theta);
        var yCoordinate = OwnLocation.Y * MapScale - rangePixels * Math.Sin(Theta);
        return new Point(xCoordinate, yCoordinate);
    }
}

代码文件顶部的usings之一是System,其中包含Math

如果我在 Watch 窗口中查看 Math.Sin(Theta)(通过选择代码、右键单击并选择“Add Watch”),我会收到以下错误:

当前上下文中不存在名称“Math”

我想知道的是:

  1. 这是 Visual Studio 2010 的预期/默认行为吗?我可以发誓这从来都不是问题,但也许它一直都是这样工作的,而我不知何故从未注意到。
  2. 如果出现此错误是不正常的,您是否想过问题可能是什么? Visual Studio 中有上百万种设置,我不知道从哪里开始。

我应该注意到这个问题与this 有点相似,但我没有遇到任何问题,我将鼠标悬停在我的局部变量上,而且我没有使用 PostSharp。

编辑

我刚刚尝试将我的所有 Visual Studio 设置重置为默认值,但我仍然遇到同样的错误。如果有人想在 Visual Studio 中尝试一个简单的测试,我只想知道如果您为 Math.Sin(1) 添加手表是否会出现错误。

编辑 2

这里有几个屏幕截图来展示我的体验:

编辑 3

有趣的是,如果我在 Watch 窗口中输入 Math.,intellisense 可以工作,但如果我完成表达式,我仍然会收到错误:

编辑 4

解决 BACON 的问题:

  1. 我在使用 QuickWatch 和 Immediate 时得到相同的行为。
  2. 关闭再重新打开所有窗口并不能解决问题。
  3. 我正在使用 Visual Studio 2010 Professional(版本 10.0.40219.1 SP1Rel)
  4. 我尝试针对 .NET 4.0 客户端配置文件和完整的 .NET 4.0。没区别。我创建了一个针对 .NET 4.0 客户端配置文件的控制台应用程序(而不是 WPF 应用程序),最后没有发生错误。因此,WPF 可能是一个问题(或 WPF 与某些第三方库)。 (接下来会检查。)

【问题讨论】:

  • 如果你在System.Math.Sin(1)添加手表会发生什么?
  • @BACON,效果很好。 (不过对于更深的命名空间来说,这会很痛苦。)
  • 快速观看和即时窗口是否表现出相同的行为?如果您完全关闭所有 Watch 窗口并从“调试”菜单重新打开它们,这会影响什么吗?您使用的是哪个版本的 Visual Studio 2010?您是否安装了 Service Pack 1?无论您的应用程序面向哪个版本的 .NET,这种情况都会发生吗?
  • @BACON,请参阅我的编辑(编辑 4)。您的任何建议都没有解决问题,但您的最后一个建议给了我尝试控制台应用程序(而不是 WPF)的想法,并且至少让错误停止发生。
  • @BACON,找出问题所在(请参阅下面的答案)。感谢您的帮助!

标签: c# visual-studio visual-studio-2010 debugging mono.cecil


【解决方案1】:

看来罪魁祸首是执行IL编织的第三方库(Fody.PropertyChanged)。

如果我创建一个没有此库的新 WPF 项目,我可以在 Watch 窗口中使用 Math.Sin()。安装 PropertyChanged 后,我开始收到“在此上下文中不可用”错误。

感谢@BACON 引导我走上正确的道路来解决这个问题。

这是我在 PropertyChanged 网站上发布的问题的链接:

http://code.google.com/p/propertychanged/issues/detail?id=6&thanks=6&ts=1330494634

编辑

随后,事实证明这可能是 Mono-Cecil 中的一个错误,PropertyChanged 使用了该错误:

https://github.com/jbevain/cecil/issues/90

【讨论】:

    【解决方案2】:

    我是在一个小测试应用程序的构造函数中做到这一点的..

    尝试关注数学可以让我看到 E 和 PI 的值。 你不能把一个放在罪上。 将一个放在 val 上就可以了。

    所以,不,我不认为这很正常,除非你点击了错误的名字。即,不是变量,而是“Sin”部分......

    这里是我强调整个事情的地方...

    【讨论】:

    • 谢谢,但我想知道如果你关注Math.Sin(val) 会发生什么。单独监视val 不是我的问题。
    • 嗯...好吧,我突出显示了整个“Math.Sin(val)”,并拿了一块手表,显示值为 0.84147....好吧。
    • 刚刚对我的问题进行了编辑,希望能更清楚地说明我在问什么。
    • 好的,我的 Visual Studio 肯定出了问题,嗯。 +1 为我进行测试。
    猜你喜欢
    • 2010-11-09
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多