Существует ли переменная или препроцессор, постоянный, который позволяет знать, что код выполнен в контексте Visual Studio?
Попробуйте свойство Debugger.IsAttached или DesignMode или получите ProcessName или их комбинацию, при необходимости
Debugger.IsAttached // or
LicenseUsageMode.Designtime // or
System.Diagnostics.Process.GetCurrentProcess().ProcessName
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;
}
}
}
Я думаю, что самый простой и надежный способ определить, выполняется ли ваше расширение в конструкторе WinForms, - это проверить текущий процесс.
public static bool InVisualStudio() {
return StringComparer.OrdinalIgnoreCase.Equals(
"devenv",
Process.CurrentProcess.ProcessName);
}
Свойство DesignMode не всегда точно. Нам приходилось использовать этот метод, чтобы он работал последовательно:
protected new bool DesignMode
{
get
{
if (base.DesignMode)
return true;
return LicenseManager.UsageMode == LicenseUsageMode.Designtime;
}
}
Важен контекст вашего вызова. У нас в среде IDE DesignMode возвращал false при запуске в событии при определенных обстоятельствах.
Я использую этот код, чтобы различать, работает ли он в Visual Studio или развернут для клиентов.
if (ApplicationDeployment.IsNetworkDeployed) {
// do stuff
} else {
// do stuff (within Visual Studio)
}
Прекрасно работает у меня целую вечность. Я пропускаю некоторую логику внутри Visual Studio (например, вход в приложение и т. Д.).
Для компонентов есть свойство DesignMode
. Это удобно при использовании средства просмотра дизайна VS.
Но когда вы говорите об отладке в Visual Studio, вам необходимо использовать свойство Debugger.IsAttached
. Затем вы также можете использовать
#if DEBUG
#endif
Есть свойство DesignMode, которое вы можете проверить, но, по моему опыту, оно не всегда точно. Вы также можете проверить, является ли исполняемый файл DevEnv.exe
. Взгляните здесь . Возможно, этот вопрос будет обманом, но все зависит от того, чего вы пытаетесь достичь.