Visual Studio 观察窗口未考虑 using 语句

8

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

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);
    }
}

代码文件顶部的一个使用是 System,其中包含 Math
如果我在监视窗口中查看 Math.Sin(Theta)(通过选择代码、右键单击并选择“添加监视”),我会得到以下错误:
“当前上下文中不存在名称 'Math'。”
我想知道的是:
1. 这是 Visual Studio 2010 的预期/默认行为吗?我敢肯定以前从来没有出现过这个问题,但也许它一直都是这样工作的,而我不知道。 2. 如果不正常出现此错误,您认为问题可能是什么?Visual Studio 中有数百万个设置,我不知道从哪里开始。
我应该注意到这个问题与 this 类似,但我没有遇到任何鼠标悬停在本地变量上的问题,也没有使用 PostSharp。
我刚刚尝试将我的 Visual Studio 设置重置为默认值,但仍然遇到相同的错误。如果有人想在 Visual Studio 中进行简单的测试,我只想知道当你添加 Math.Sin(1) 的监视器时是否会出错。
编辑2:
这里有几张屏幕截图来展示我所经历的:

Adding Math.Sin(1) to watch

Showing error for Watch

编辑3

有趣的是,如果我在监视窗口中输入Math.,智能感知会起作用,但是如果我完成表达式,仍然会出现错误:

Showing intellisense working

编辑4

回答BACON的问题:

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

如果在 System.Math.Sin(1) 上添加一个监视器会发生什么? - Lance U. Matthews
@BACON,这很好用。(但是对于更深层次的命名空间来说会变得很麻烦。) - devuxer
2
快速监视和即时窗口表现出相同的行为吗?如果您完全关闭所有监视窗口并从“调试”菜单重新打开它们,是否会影响任何内容?您使用的是哪个版本的Visual Studio 2010?您安装了Service Pack 1吗?不管您的应用程序针对哪个版本的.NET,这种情况是否发生? - Lance U. Matthews
@BACON,请看我的编辑(第四次编辑)。你的建议都没有解决问题,但是你最后一个建议让我想到尝试使用控制台应用程序(而不是WPF),这至少让错误停止发生了。 - devuxer
@BACON,问题已经解决(请看下面的答案)。感谢您的帮助! - devuxer
2个回答

6

看起来罪魁祸首是一个第三方库,它执行了IL编织(Fody.PropertyChanged)。

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

感谢@BACON带领我找到了正确的解决方法。

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

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

编辑

随后发现这可能是Mono-Cecil中的一个bug,而PropertyChanged使用了它:

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


1

我在一个小测试应用程序中完成了这个,在构造函数中...

enter image description here

尝试在Math上放置一个监视器,让我看到E和PI的值。 你不能在Sin上放置监视器。 在val上放置一个监视器完全没有问题。
所以,不,我认为这并不太正常,除非你点击了错误的名称。即,不是变量,而是"Sin"部分...
这里是我突出显示整个内容的地方...

enter image description here


谢谢,但我需要知道如果你对Math.Sin(val)进行观察会发生什么。仅对val进行观察不是我的问题。 - devuxer
嗯...好吧,我将整个"Math.Sin(val)"都标记了出来,并且得到了一个监视器,显示值为0.84147...很抱歉没有仔细阅读问题。 - pennyrave
我刚刚对我的问题进行了编辑,希望能更清楚地表达我的意思。 - devuxer
好的,我的 Visual Studio 肯定出了点问题,嗯。感谢你帮我测试。 - devuxer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接