C# 使用Debugger.IsAttached确定环境是否正确?

C# 使用Debugger.IsAttached确定环境是否正确?,c#,development-environment,production-environment,C#,Development Environment,Production Environment,我只有两个环境:开发和生产。使用下一个代码来了解应用程序是否以一种或另一种方式运行是一个好主意吗 bool IsProduction() { return !Debugger.IsAttached; } 我读了很多书,但在我看来,讨论采取了不同的方式 使用appSettings键怎么样 <appSettings> <add key="Environment" value="Dev"/> </appSettings> 如果有人编辑配置文件会

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

bool IsProduction()
{
   return !Debugger.IsAttached;
}
我读了很多书,但在我看来,讨论采取了不同的方式

使用appSettings键怎么样

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

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


谢谢你的时间

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

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

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

使用Debugger.IsAttached的第一个方法即使在开发中也无法工作,除非您将调试器实际附加到流程

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


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

您的方法会显示“如果已连接调试器,则我们正在生产”。您是否习惯于只在生产环境中调试,而从不在开发环境中调试?我对您的代码感到非常困惑,而这正是不这样做的原因。更一般地说,您应该使用“is the debugger attached”方法只用于一件事:查看调试器是否已附加。@EricLippert抱歉,我错过了!operator.OK,然后从逻辑上进行推理。调试器是否总是附加在开发中?它从未在生产中附加吗?如果这两件事是真的,那么你的代码是正确的。如果其中一个不是,那么代码有时是错误的。有时写错误的代码会有什么后果?这里要问你自己的问题是:我为什么在乎?在生产中你会做什么,而在开发中你不会做什么?在开发过程中,您将做哪些在生产过程中不做的事情?例如,假设您说“我想在开发中运行相同的计算两次,一次使用快速算法,一次使用慢速算法,并验证结果是否相同,但在生产中我只想运行快速算法”。对于类似的情况,可以使用断言、条件编译或条件方法。说出您真正想要做的事情。您还可以使用
[条件(“调试”)]
属性()