vscode visual temas tag studio para configurar color code closing brackethighlighter visual-studio debugging

visual-studio - temas - visual studio code autocomplete html



Compruebe si la aplicaciĆ³n se iniciĆ³ desde Visual Studio (4)

Estoy trabajando en una aplicación que instala un gancho de teclado de todo el sistema. No quiero instalar este enganche cuando estoy ejecutando una compilación de depuración desde el estudio visual (o de lo contrario colgaría el estudio y finalmente el sistema), y puedo evitar esto comprobando si el símbolo DEPURAR está definido.

Sin embargo, cuando depuro la versión de lanzamiento de la aplicación, ¿hay alguna manera de detectar que se ha iniciado desde dentro del estudio visual para evitar el mismo problema? Es muy molesto tener que reiniciar el estudio / la computadora, simplemente porque he estado trabajando en la compilación de lanzamiento, y quiero arreglar algunos errores usando el depurador habiendo olvidado volver a la compilación de depuración.

Actualmente uso algo como esto para verificar este escenario:

System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); string moduleName = currentProcess.MainModule.ModuleName; bool launchedFromStudio = moduleName.Contains(".vshost");

Yo llamaría a esto la "forma de fuerza bruta", que funciona en mi entorno, pero me gustaría saber si hay otra forma (mejor) de detectar este escenario.


Desaconsejaría encarecidamente el uso del código que solo se ejecuta en el momento de la depuración. ¿Por qué? Le gustaría asegurarse de que lo que entre en producción sea lo que está probando / viendo localmente. Esto es especialmente cierto en el lenguaje de nivel inferior que utiliza, ya que a menudo las diferencias en el código hacen que el compilador produzca su máquina / IL de manera diferente.

Tal vez con el propósito de descubrir un problema, pero eso es todo.



Probar si el nombre del módulo del proceso actual contiene la cadena ".vshost" es la mejor forma que he encontrado para determinar si la aplicación se está ejecutando o no dentro del VS IDE.

Usar la propiedad System.Diagnostics.Debugger.IsAttached también está bien, pero no le permite distinguir si está ejecutando el EXE a través del comando Ejecutar de VS IDE o si está ejecutando la compilación de depuración directamente (por ejemplo, usando Windows Explorer o un acceso directo) ) y luego unirlo usando el VS IDE.

Verá, una vez encontré un problema con un error de Prevención de ejecución de datos (relacionado con COM) que requería que ejecutara un evento de publicación posterior que ejecutara editbin.exe con el parámetro / NXCOMPAT: NO en el EXE generado VS.

Por alguna razón, el EXE no se modificó si solo presionas F5 y ejecutas el programa y, por lo tanto, AccessViolationExceptions ocurriría en el código que viola el DEP si se ejecuta dentro del VS IDE, lo que hace que sea extremadamente difícil depurarlo. Sin embargo, descubrí que si ejecutaba el EXE generado a través de un atajo y luego adjuntaba el depurador VS IDE, podía probar mi código sin que se produjeran AccessViolationExceptions.

Así que ahora he creado una función que usa el método "vshost" que puedo usar para advertir sobre, o bloquear, que se ejecute cierto código si solo estoy haciendo mi rutina de programación diaria desde el VS IDE.

Esto evita que esas desagradables AccessViolationExceptions se levanten y, por lo tanto, bloquee fatalmente mi aplicación si inadvertidamente intento ejecutar algo que sé que me causará dolor.