48 votes

Comment détecter que le code Windows Forms C # est exécuté dans Visual Studio?

Existe-t-il une variable ou une constante de préprocesseur permettant de savoir que le code est exécuté dans le contexte de Visual Studio?

67voto

Asad Butt Points 8989

Essayez De Débogueur.Les isattached ou DesignMode de propriété ou d'obtenir ProcessName ou une combinaison, selon le cas

Debugger.IsAttached // or                                       
LicenseUsageMode.Designtime // or 
System.Diagnostics.Process.GetCurrentProcess().ProcessName

Voici un échantillon

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;
        }
    }
}

18voto

Digicoder Points 844

La propriété DesignMode n'est pas toujours précise. Nous avons eu recours à cette méthode pour que cela fonctionne de manière cohérente:

     protected new bool DesignMode
    {
        get
        {
            if (base.DesignMode)
                return true;

            return LicenseManager.UsageMode == LicenseUsageMode.Designtime;
        }
    }
 

Le contexte de votre appel est important. DesignMode a renvoyé la valeur false dans l'EDI si elle a été exécutée dans un événement dans certaines circonstances.

6voto

tanascius Points 22712

Il est l' DesignMode de la propriété pour les Composants. Il est très pratique lorsque vous utilisez le Design de la Visionneuse de VS.

Mais quand vous parlez de débogage dans Visual Studio, vous devez utiliser l' Debugger.IsAttached de la propriété. Ensuite, vous pouvez utiliser

#if DEBUG
#endif

trop

4voto

JaredPar Points 333733

Je pense que le moyen le plus simple et le plus fiable de déterminer si votre extension est exécutée dans le concepteur WinForms est de vérifier le processus en cours.

 public static bool InVisualStudio() {
  return StringComparer.OrdinalIgnoreCase.Equals(
    "devenv", 
    Process.CurrentProcess.ProcessName);
}
 

2voto

Paul Sasik Points 37766

Vous pouvez vérifier une propriété DesignMode, mais d'après mon expérience, elle n'est pas toujours précise. Vous pouvez également vérifier si l'exécutable est DevEnv.exe.

Jetez un coup d'oeil ici . Peut faire de cette question une dupe mais tout dépend de ce que vous essayez d'accomplir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X