使用Debugger.IsAttached判断环境是否正确?

Is it correct to use Debugger.IsAttached to determinate the environment?

我只有两个环境:开发生产。使用下一个代码来了解应用程序是否是 运行 是不是一个好主意?

bool IsProduction()
{
   return !Debugger.IsAttached;
}

我读过this and this,但在我看来讨论的方式不同。

使用 appSettings 密钥怎么样?

<appSettings>
    <add key="Environment" value="Dev"/>
</appSettings>

如果有人编辑配置文件会发生什么?代码应该有一个 "double-check" 机制吗?该值应该加密还是太多了?

感谢您的宝贵时间!

Debugger.IsAttached 只有 return 如果进程附加了独立于构建的调试器(在 VS 下运行或附加了外部调试器),则

为真。

如果您想根据构建类型区分环境,您可以使用预处理器指令设置布尔值,如下所示:

#if DEBUG
bool isDebug = true;
#else
bool isDebug = false;
#endif

使用 Debugger.IsAttached 的第一种方法即使在开发中也不会起作用,除非您确实将调试器附加到进程。

配置值是一种正确的方法,从灵活性的角度来看可能是我所知道的最好的方法。您可以配置不同的环境,并通过使用转换配置文件,这将在部署期间自动更新。

如果您想了解更多关于配置转换方法的信息,我可以为您提供一些链接

你永远不应该假设Debugger.IsAttached在生产模式下不会运行。你会进入麻烦如您所见,如果您使用如下代码,它将在 PROD 模式下解锁开发者模式功能:

if (Debugger.IsAttached())
{
    // Unlock Developer functionalities;
}