2010-01-12 17 views
8

Me preguntaba si había una forma de bloquear por completo mi código mientras lo depuraba en Visual Studio 2008. Los documentos de código se bloquean automáticamente cuando se ejecutan como aplicaciones de 64 bits, lo que prefiero mucho; sin embargo, hago la mayor parte de mi codificación haciendo complementos para Excel, que es de 32 bits. El resultado es que, aunque segmente 'AnyCPU', el host VS sabe que se está ejecutando en un proceso de 32 bits y, por lo tanto, el código fuente es no bloqueado mientras el código se ejecuta alojado en Visual Studio.¿Hay alguna manera de * completamente * desactivar Editar y Continuar?

Puedo desactivar Editar y Continuar yendo a Herramientas> Opciones> Depuración> Editar y Continuar, y luego desmarcar la casilla de verificación "Habilitar Editar y Continuar". Sin embargo, esto no bloquea completamente el código. Esto evita que se ejecute ninguna edición en el código en la ejecución actual, pero no impide que los clics del mouse o las teclas cambien realmente el código.

De nuevo, cuando se trabaja con aplicaciones de 64 bits, esto no ocurre: el código está completamente bloqueado. Yo prefiero en gran medida el código que va a bloquear por completo durante al menos un par de razones:

  1. que accidentalmente puede presionar una tecla o similar durante la depuración, lo que definitivamente no quiero hacer. Es raro, pero es un problema.

  2. Muchas de mis pruebas automatizadas conducen la interfaz de usuario a través de SendKeys. Sin embargo, al pasar por una prueba de este tipo utilizando el depurador, a veces puedo olvidar que algunos de los aspectos involucran a SendKeys, lo que significa que las pulsaciones de teclas terminan siendo enviadas al Visual Studio IDE en lugar de a Excel.

En la edición # 2, arriba, la prueba de la unidad falla, lo cual está bien - mi mal - pero tener todas las pulsaciones de teclado enviados al módulo de código y la destrucción de mi código es completamente inaceptable.

¿Alguien tiene alguna idea aquí? ¿Se puede bloquear completamente el código cuando se ejecuta hospedado en Visual Studio mientras se compila en una CPU de 32 bits?

Algunos mensajes relacionados en esta cuestión, pero ninguna de las cuales dirigirse directamente a éste:

Gracias de antemano por cualquier ayuda o ideas ...

Mike

+0

Tenga en cuenta que una prueba unitaria que se comunica con un software externo se denomina prueba de integración. –

+0

@Lasse: Ok, es suficiente. Editaré lo anterior para decir "pruebas automatizadas", ya que estoy ejecutando un conjunto de pruebas que van desde pruebas de unidades aisladas hasta pruebas de integración. Gracias. No importa mucho aquí, es SendKeys el problema, independientemente del tipo de prueba que desee considerar. –

Respuesta

3

Aquí está lo mejor que pude encontrar. Funciona, pero hay algunos pasos que puede que no desee realizar.

Básicamente, la técnica consiste en establecer los archivos de su proyecto como de solo lectura cuando ejecuta la aplicación, y luego configurarlos de nuevo para que se puedan escribir una vez que finalice su aplicación.

Sin embargo, en VS2k8, de manera predeterminada, establecer un archivo en Solo lectura todavía le permite editar el archivo. Primero debe desactivar la configuración "Permitir edición de archivos de solo lectura ..." en Herramientas> Opciones> Entorno> Documentos.

En segundo lugar, es necesario agregar la siguiente clave en el registro como DWORD y establezca su valor en 1:

HKCU\Sofware\Microsoft\Visual Studio\9.0\Source Control\UncontrolledInMemoryEditDialogSuppressed 

Este todavía no va a funcionar por completo. Lo que debe hacer entonces es establecer su control de código fuente para ese proyecto en Visual Source Safe. (< - este es el paso que estoy asumiendo que no le gustará.)

A continuación, reinicie VS2k8.

En este punto, si configura uno de sus archivos como de solo lectura, verá que Visual Studio no le permitirá editar este archivo en absoluto. Cuando lo intentas, reproduce la música de excepción de tu computadora.

Ahora, para hacer que sus archivos sean de solo lectura cuando ejecuta la aplicación, establezca un proceso posterior a la compilación para hacerlo. Eso es fácil.

Más difícil, es volver a configurarlas para que se pueda escribir cuando la aplicación termine de ejecutarse. La solución más simple es probablemente un acceso directo de archivo por lotes.

+0

+1 Guau, muy impresionante. Estoy buscando algo más limpio y fácil, pero parece que se requerirá algún tipo de hack o macro. Si a nadie se le ocurre algo más fácil, le daré la marca de verificación, pero dejaré que esto continúe durante unos días más para ver si alguien puede hacerlo mejor. (Por cierto, ¿esto sería más limpio o más fácil de hacer en VS 2010? Por favor, no pongas ningún trabajo para investigar esto, pero si sabes de la parte superior de tu cabeza.) –

+0

Parece una mala idea para meterse con los bits de solo lectura detrás de la parte posterior del proveedor de control de fuente. – Josh

+0

"Parece una mala idea meterse con los bits de solo lectura detrás de la parte posterior del proveedor de control de código fuente". Ese es un buen punto, Josh. Y el requisito de usar Visual Source Safe también es definitivamente un problema. Creo que tendré que incumplir mi promesa a 'Clever Human' de dar la marca de verificación aquí ... Creo que esta sigue sin resolverse. :-(:-( –

4

Hola - lo siento, no puedo ayudarte con bloqueo por completo su código - Tengo el deseo contrario: por completo DESBLOQUEA durante la depuración, pero puedo ayudarte con tu segundo problema.

Sugiero que considere verificar la ventana activa antes de enviar cualquier clave y si la ventana activa no es su sitio de destino, pause la ejecución de la prueba hasta que se devuelva el foco esa ventana.

Sé que no es la solución que desea, pero probablemente no haría daño para evitar otros problemas similares.

¡La mejor de las suertes!

Adam

+0

+1 Muy buena idea Adam. Definitivamente utilizaré alguna versión de esto. No puedo darte la marca para esto, como sabes, pero esta es una gran ayuda. ¡Gracias!(Parece que tendré que comenzar una recompensa con la esperanza de resolver los problemas principales ... Estoy empezando a pensar que no puede ser). –

+0

Me encantaría saber si lograste hacer el código completamente editable, y cómo. –

5

Aquí es un truco que utilizar en Visual Studio 2005 (no tienen la oportunidad de probar en Visual Studio 2008, pero debería funcionar):

  • Abrir las propiedades del ensamblado ejecutable
  • Va a la pestaña depuración
  • Compruebe el Habilitar la depuración de código no administrado casilla

Los documentos de código deben permanecer bloqueados, incluso cuando se golpea un punto de interrupción, y cualquier intento de cambiarlo debe desencadenar una ventana emergente que diga "No se permiten cambios cuando se habilita la depuración no administrada".

+0

Laurent, esto suena MUY prometedor ... pero no funciona para mí cuando se compila contra 'x86'. El comportamiento no cambia para nada, desafortunadamente. ¿Debo agregar algunas operaciones 'inseguras' en alguna parte para forzar este efecto de bloqueo? –

+0

En "Herramientas> Opciones> Depuración> General", ¿tiene "Romper todos los procesos cuando se rompe un proceso". Verifique? Voy a tratar de hacer algunas pruebas con Visual Studio 2008 y mantenerlo informado. –

+0

Hola Laurent, sí, "Rompe todos los procesos cuando un proceso descansos "está marcado. Gracias por esforzarme. (De hecho, +1 por el esfuerzo realizado hasta ahora, realmente lo aprecio). –

Cuestiones relacionadas