¿Hay una variable o una constante de preprocesador que permita saber que el código se ejecuta dentro del contexto de Visual Studio?¿Cómo detectar que el código de C# Windows Forms se ejecuta dentro de Visual Studio?
Respuesta
Trate Debugger.IsAttached o DesignMode propiedad o conseguir ProcessName o una combinación, según el caso
Debugger.IsAttached // or
LicenseUsageMode.Designtime // or
System.Diagnostics.Process.GetCurrentProcess().ProcessName
Aquí es una sample
public static class DesignTimeHelper {
public static bool IsInDesignMode {
get {
bool isInDesignMode = LicenseManager.UsageMode == LicenseUsageMode.Designtime || Debugger.IsAttached == true;
if (!isInDesignMode) {
using (var process = Process.GetCurrentProcess()) {
return process.ProcessName.ToLowerInvariant().Contains("devenv");
}
}
return isInDesignMode;
}
}
}
+1 para Debugger.IsAttached –
No olvides la loca pérdida de memoria en Process.GetCurrentProcess() recuerda desechar – Neil
En mi código, he agregado una variable bool estática para saber cuándo se llamó IsInDesignMode y otra para mantener el resultado de la función.Al comienzo de la función, devuelvo el resultado de la primera llamada. Con esto, el interior de la función es solo llamada una vez en tiempo de diseño y una vez en tiempo de ejecución. No veo ningún conflicto donde el tiempo de diseño se fusione con el tiempo de ejecución y esto es mucho más rápido cuando tiene una gran cantidad de llamadas a esta función. – Samuel
Hay una propiedad de DesignMode que puede verificar, pero según mi experiencia, no siempre es precisa. También puede verificar si el ejecutable es DevEnv.exe
Tome look here. Podría hacer que esta pregunta sea una dupla, pero todo depende de lo que intentes lograr.
Existe la propiedad DesignMode
para Componentes. Es útil cuando usa el Visor de diseño de VS.
Pero cuando hablas de depuración en Visual Studio, necesitas utilizar la propiedad Debugger.IsAttached
. A continuación, puede utilizar
#if DEBUG
#endif
demasiado
+ 1 para Debugger.IsAttached –
Creo que la forma más sencilla y fiable para determinar si la extensión se ejecuta en el diseñador de Windows Forms es comprobar el proceso actual.
public static bool InVisualStudio() {
return StringComparer.OrdinalIgnoreCase.Equals(
"devenv",
Process.CurrentProcess.ProcessName);
}
que utiliza este código para distinguir si se está ejecutando en Visual Studio o si está implementado para los clientes.
if (ApplicationDeployment.IsNetworkDeployed) {
// do stuff
} else {
// do stuff (within Visual Studio)
}
Funciona bien para mí durante siglos. Me salteo algo de lógica cuando estoy dentro de Visual Studio (como iniciar sesión en la aplicación, etc.).
¿No supone eso [ClickOnce] (http://en.wikipedia.org/wiki/ClickOnce) (disfrazado en Visual Studio como "Publicar")? ¿Funcionaría si un proyecto de instalación se utiliza para producir un instalador [MSI] ordinario (http://en.wikipedia.org/wiki/Windows_Installer)? –
La propiedad DesignMode no siempre es precisa. Hemos utilizado este método para que funcione de manera coherente:
protected new bool DesignMode
{
get
{
if (base.DesignMode)
return true;
return LicenseManager.UsageMode == LicenseUsageMode.Designtime;
}
}
El contexto de su llamada es importante. Hemos tenido DesignMode return false en el IDE si se está ejecutando en un evento bajo ciertas circunstancias.
Puede utilizar esta:
protected static bool IsInDesigner
{
get { return (Assembly.GetEntryAssembly() == null); }
}
utilizo este método de extensión:
internal static class ControlExtension
{
public static bool IsInDesignMode(this Control control)
{
while (control != null)
{
if (control.Site != null && control.Site.DesignMode)
return true;
control = control.Parent;
}
return false;
}
}
- 1. cómo detectar que el código se ejecuta dentro del IDE Eclipse
- 2. Detectar la versión de Visual Studio dentro de un VSPackage
- 3. Depuración de la aplicación Windows Forms que acepta argumentos de línea de comandos en Visual Studio
- 4. ¿Cómo me conecto a una aplicación que se ejecuta dentro del emulador de Windows Phone?
- 5. Visual Studio C# 2010 Express Debug se ejecuta más rápido que la versión
- 6. Cómo detectar si estoy compilando código con Visual Studio 2008?
- 7. Espacios de nombres, alias y diseñador de Visual Studio Forms
- 8. ¿Se ejecuta el código C más rápido?
- 9. ¿Qué significa cuando Visual Studio me dice que mi proyecto no es compatible con el código?
- 10. Servicio de Windows que se ejecuta periódicamente
- 11. ¿Cómo inserto un menú desplegable para una aplicación simple de Windows Forms en Visual Studio 2008?
- 12. Formateador de código Visual Studio
- 13. Uso de Console.WriteLine dentro de una aplicación de Windows Forms
- 14. visual studio 2010 C++ símbolos de depuración cargados pero no se puede encontrar el código fuente
- 15. Extensión de Visual Studio 2010 que amplía el código
- 16. Powershell dentro de Visual Studio
- 17. Restore C# Windows Forms backcolor
- 18. Alineación de código/margen de código en Visual Studio
- 19. ¿Cómo comprobar si el programa se ejecuta con el control de Visual Studio?
- 20. ¿Cómo imitar el evento onBlur de JavaScript en Windows Forms?
- 21. ¿Cómo saber el tipo de proyecto de Visual Studio desde un proyecto de Visual Studio existente
- 22. Formato de código de Visual Studio
- 23. ¿Cómo enviar eventos desde el HTML que se ejecuta dentro de un UIWebView al código nativo Objective-C?
- 24. Visual Studio/formato de código de ReSharper - C#
- 25. ¿Cómo puedo hacer que Visual Studio se rompa justo antes de que se detenga el programa?
- 26. Barra de estado en C# Windows Forms
- 27. ¿Cómo detectar la actividad del usuario con un servicio Java que se ejecuta en Windows?
- 28. Complemento de métricas de código de Visual Studio para C++
- 29. ¿El bloque C# "finally" SIEMPRE se ejecuta?
- 30. Visual Studio C++: ¿Al ver el código ASM?
¿Quieres esta información para saber si su código se está depurando? Si es así, hay una macro que le dice si hay un depurador conectado a su aplicación, consulte: http://stackoverflow.com/questions/2188201/is-there-a-way-to-detect-if-a-debugger-is -incorporado-a-un-proceso-de-c –
En C# puede usar: http://stackoverflow.com/questions/361077/c-clr-remote-debugger-how-to-wait-until-attached –