2012-02-29 2 views
8

Я следующий код в модели представления:Визуальное окно студии Watch не принимая во внимание usings

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.

Если просмотреть Math.Sin(Theta) в окне Watch (выбрав код, щелкнув правой кнопкой мыши и выбрав «Add Watch»), я получаю следующее сообщение об ошибке:

The name 'Math' does not exist in the current context

То, что я хочу знать:

  1. Является ли это ожидаемым/стандартным поведением для Visual Studio 2010? Я мог бы поклясться, что это никогда не было проблемой, но, возможно, это всегда срабатывало так, и я так или иначе не замечал.
  2. Если это не нормально, чтобы получить эту ошибку, любые мысли о том, что может быть проблемой? В Visual Studio есть миллион настроек, и я не знаю, с чего начать.

Я должен отметить этот вопрос отдаленно напоминает this, но я не имея каких-либо проблем, наведите курсор мыши на моих локальных переменных, и я не использую PostSharp.

Редактировать

Я просто попытался сбросить все мои настройки Visual Studio поддерживает по умолчанию, и я все еще получаю ту же ошибку. Если кто-то хочет попробовать простой тест в Visual Studio, я просто хочу знать, если вы получите сообщение об ошибке, если вы добавите часы для Math.Sin(1).

Edit 2

Вот экран пара захватывает, чтобы показать, что я испытываю:

Adding Math.Sin(1) to watch

Showing error for Watch

Редактировать 3

Inter estingly, IntelliSense работает, если я типа Math. в окно Watch, но если я закончу выражение, я все еще получаю ошибку:

Showing intellisense working

Edit 4

Для решения вопросов Бэкона:

  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 с некоторыми сторонними библиотеками). (Буду ли проверить, что в следующем.)
+0

Что произойдет, если вы добавите часы на 'System.Math.Sin (1)'? – BACON

+0

@BACON, это хорошо работает. (Это становится болью, но для более глубоких пространств имен.) – devuxer

+2

Быстрое наблюдение и немедленное окно проявляют такое же поведение? Если вы полностью закрываете все окна Watch и открываете их из меню Debug, это влияет на что-либо? Какую версию Visual Studio 2010 вы используете? У вас установлен пакет обновления 1 (SP1)? Это происходит независимо от того, какая версия .NET предназначена для вашего приложения? – BACON

ответ

6

Похоже, что преступник является библиотекой третьей стороной который выполняет переплетение IL (Fody.PropertyChanged).

Если я создаю новый проект WPF без этой библиотеки, я могу использовать Math.Sin() в окне «Часы». Как только я установлю PropertyChanged, я начинаю получать ошибку «недоступно в этом контексте».

Благодаря @BACON за то, что он провел меня по правильному пути, чтобы понять это.

Вот ссылка на вопрос я разместил на сайте PropertyChanged:

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

Edit

И впоследствии, оказывается, это, вероятно, ошибка в Mono-Сесиль, который PropertyChanged использует:

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

1

Я сделал это в Литте тестового приложения, в конструкторе ..

enter image description here

Попытка поставить часы на Math позволяет мне увидеть значение E и PI. Вы не можете поместить его в Грех. Поставить один на вал работает просто отлично.

Итак, нет, я не думаю, что это вполне нормально, если вы не нажмете на неправильное имя. Т.е., не переменная, а «Sin» часть ...

Вот где я выделил всю вещь ...

enter image description here

+0

Спасибо, но мне нужно знать, что произойдет, если вы будете смотреть «Math.Sin (val)». Выполнение часов для «val» в одиночку не является моей проблемой. – devuxer

+0

Хм ... ну, я выделил всю вещь «Math.Sin (val)» и получил часы, показывающие значение 0,84147 .... Извините, что вы не очень хорошо читали вопрос. – pennyrave

+0

Только что добавил редактирование на мой вопрос, надеюсь, будет более ясно, что я прошу. – devuxer