使用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;
}
我只有两个环境:开发和生产。使用下一个代码来了解应用程序是否是 运行 是不是一个好主意?
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;
}