【问题标题】:Is it correct to use Debugger.IsAttached to determinate the environment?使用 Debugger.IsAttached 确定环境是否正确?
【发布时间】:2017-06-20 00:21:36
【问题描述】:

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

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

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

如何使用 appSettings 键?

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

如果有人编辑配置文件会发生什么?代码应该有“双重检查”机制吗?值应该加密还是太多?

感谢您的宝贵时间!

【问题讨论】:

  • 您的方法说“如果附加了调试器,那么我们就在生产中”。您是否习惯于仅在生产中进行调试,而从不在开发中进行调试?我对您的代码感到非常困惑,仅此一项就是不这样做的理由。
  • 更一般地,您应该使用“是否附加了调试器”方法只做一件事:查看是否附加了调试器。
  • @EricLippert 对不起,我错过了!运算符。
  • 好的,然后逻辑推理。调试器是否总是附加在开发中?它从不在生产中附加吗?如果这两件事都是真的,那么你的代码是正确的。如果两者都不是,那么代码有时是错误的。编写有时出错的代码会有什么后果?
  • 这里要问自己的问题是:我为什么要关心?你打算在生产中做哪些你在开发中不做的事情?你打算在开发中做哪些在生产中不做的事情?例如,假设您说“我想在开发中运行两次相同的计算,一次使用快速算法,一次使用慢速算法,并验证结果是否相同,但在生产中我只想运行快速算法” .对于类似的事情,您将使用断言、条件编译或条件方法。说出你真正想做的事。

标签: c# development-environment production-environment


【解决方案1】:

Debugger.IsAttached 仅在进程附加了独立于构建的调试器(在 VS 下运行或附加了外部调试器)时才会返回 true。

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

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-27
    • 2019-04-07
    • 2016-06-28
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2022-11-03
    相关资源
    最近更新 更多