检测程序是否由Visual Studio运行,而不是从Windows资源管理器运行

Mar*_*off 27 c# visual-studio

有没有办法检测您的程序是否通过Visual Studio加载,而不是它是作为独立的可执行文件启动的?

我们的软件具有错误报告功能,可以处理未处理的异常 - 我们需要能够将调试版本分发给我们的beta测试人员,但是当我们处于开发阶段时,我们不希望错误报告发生,因为如果VS使用完整堆栈跟踪捕获它们,则异常会更有用.

现在,如果Application.ExecutablePath包含bin\Debug或bin\Release,我将禁用错误报告,但我认为可能有更强大的方法来检测程序是否通过VS加载.

显然,我们可以使用一些预处理器宏来设置不同的构建,但是为了这个问题,假设这不是一种可能性 - 我不介意添加代码,但我试图对其进行最少的修改构建过程,这就是为什么命令行选项也是最后的选择.

如果重要,我正在使用VS2003/.NET 1.1.

use*_*116 51

如果你这样做是为了确定它是否在任何调试器中(由@JaredPar澄清),你可以在异常处理程序中使用Debugger.IsAttached.

try
{
    // ...
}
catch(Exception ex)
{
    if (!Debugger.IsAttached)
    {
        ExceptionHandler.Frob(ex);
    }
    else
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者:

public static void Frob(Exception ex)
{
    if (Debugger.IsAttached)
    {
        Debugger.Break();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这正是其中之一"我不知道我在寻找什么,但是当我看到它时我会知道它"的答案 - 完美,谢谢! (2认同)
  • 需要注意的一件事是,这将告诉是否附加了任何调试器,而不是附加了Visual Studio.附加WinDbg会导致相同的行为. (2认同)

bro*_*chb 5

我不进行 .net 开发,但在 Java 中,我通过将标志传递到应用程序的启动选项来完成此操作。因此,您可以将调试标志从 IDE 传递到应用程序中,然后进行检查,当应用程序作为可执行文件运行时,该标志将不存在。如果 .net 没有类似的东西,我会感到惊讶。


小智 5

在 VisualStudio 2022 中以调试或发布模式运行应用程序时,会设置一些环境值。其中之一是“ VisualStudioEdition ”。

所以我检测到我正在 Visual Studio 中使用如下代码运行:

var isRunningInVS = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("VisualStudioEdition"));
Run Code Online (Sandbox Code Playgroud)