2012-02-29 21 views
8

he el código siguiente en un modelo de vista:Visual Studio ventana Watch no teniendo en cuenta 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); 
    } 
} 

Uno de los usings en la parte superior del archivo de código es System, que contiene Math.

Si veo Math.Sin(Theta) en la ventana Inspección (seleccionando el código, hacer clic derecho y elegir "Add Watch"), me sale el siguiente error:

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

Lo que yo quiero saber es:

  1. ¿Este comportamiento esperado/predeterminado para Visual Studio 2010? Podría jurar que esto nunca solía ser un problema, pero tal vez siempre funcionó de esa manera y de alguna manera nunca me di cuenta.
  2. Si no es normal obtener este error, ¿alguna idea sobre cuál podría ser el problema? Hay un millón de configuraciones en Visual Studio, y no sabría por dónde empezar.

Debo señalar esta pregunta es vagamente similar a this, pero no estoy teniendo ningún problema pasar el ratón sobre mis variables locales, y no estoy usando PostSharp.

Editar

Acabo de intentar restablecer todos mis ajustes de Visual Studio respalda a los valores predeterminados, y sigo teniendo el mismo error. Si alguien quiere probar una prueba simple en Visual Studio, solo quiero saber si obtiene un error si agrega un reloj para Math.Sin(1).

Editar 2

Éstos son un par pantalla captura para mostrar lo que estoy experimentando:

Adding Math.Sin(1) to watch

Showing error for Watch

Datos 3

Inter estingly, IntelliSense funciona si escribo Math. en la ventana Inspección, pero si completo la expresión, todavía consigo el error:

Showing intellisense working

Editar 4

Para hacer frente a cuestiones de Bacon:

  1. Obtengo el mismo comportamiento con QuickWatch e Inmediato.
  2. Cerrar y volver a abrir todas las ventanas no resuelve el problema.
  3. Estoy usando Visual Studio 2010 Professional (versión 10.0.40219.1 SP1Rel)
  4. Intenté dirigir .NET 4.0 Client Profile y .NET 4.0 completo. No hizo ninguna diferencia. Creé una aplicación de consola (en lugar de una aplicación WPF) dirigida a .NET 4.0 Client Profile, y finalmente, el error no ocurrió. Por lo tanto, WPF puede ser un problema (o WPF con algunas bibliotecas de terceros). (Se echa en ese lado.)
+0

¿Qué sucede si agrega un reloj en 'System.Math.Sin (1)'? – BACON

+0

@BACON, eso funciona bien. (Sin embargo, para los espacios de nombres más profundos se vuelve doloroso). – devuxer

+2

¿El Quick Watch y la ventana Inmediato exhiben el mismo comportamiento? Si cierras por completo todas las ventanas Watch y las vuelves a abrir desde el menú Debug, ¿eso afecta algo? ¿Qué edición de Visual Studio 2010 estás usando? ¿Tiene el Service Pack 1 instalado? ¿Esto sucede independientemente de la versión de .NET a la que se dirige su aplicación? – BACON

Respuesta

6

Parece que el culpable es una biblioteca de terceros que realiza el tejido IL (Fody.PropertyChanged).

Si creo un nuevo proyecto WPF sin esta biblioteca, puedo usar Math.Sin() en la ventana Inspección. Una vez que instalo PropertyChanged, empiezo a obtener el error "no disponible en este contexto".

Gracias a @BACON por guiarme por el camino correcto para descubrir esto.

Aquí hay un enlace a un tema que he publicado en el sitio PropertyChanged:

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

Editar

Y posteriormente, resulta que esto es probablemente un error en Mono-Cecil, que PropertyChanged utiliza:

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

1

Hice esto en una aplicación de prueba podrían mejorarlo, en el constructor ..

enter image description here

Tratando de poner un reloj en matemáticas me permite ver los valores de E y PI. No puedes poner uno en Sin. Poner uno en val funciona bien.

Así que, no, no creo que sea bastante normal, a menos que haya hecho clic en el nombre incorrecto. Es decir, no la variable, pero la parte de "Sin" ...

Aquí es donde destaqué toda la cosa ...

enter image description here

+0

Gracias, pero necesito saber qué pasa si haces un reloj para 'Math.Sin (val)'. Hacer un reloj para 'val' solo no es mi problema. – devuxer

+0

Hmm ... bueno, destaqué todo el asunto "Math.Sin (val)", y obtuve un reloj, mostrando que el valor era 0.84147 .... Disculpa por no haber leído la pregunta muy bien. – pennyrave

+0

Acabo de agregar una edición a mi pregunta, espero que aclare más lo que estoy preguntando. – devuxer

Cuestiones relacionadas