gpt4 book ai didi

c# - #if DEBUG 与 if (env.IsDevelopment())

转载 作者:太空狗 更新时间:2023-10-29 21:01:00 26 4
gpt4 key购买 nike

似乎Preprocessor Directives (#if DEBUG) 和 ASP.NET Core Environment Name (IHostingEnvironment.EnvironmentName) 当您希望在调试/开发和发布/生产中有不同的行为时,都可以使用两者。什么时候使用一个比另一个更合适是否有任何理由比另一个更喜欢一个

#if DEBUG 示例

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
#if DEBUG
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
#else
app.UseExceptionHandler("/Error");
#endif
}

env.IsDevelopment() 示例

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Error");
}
}

更新:这个问题我正在寻找什么时候应该使用 ASP.NET Core 环境名称(.NET core 的新功能)。这与关于#if 和条件属性的其他问题不同

最佳答案

预处理器指令是有条件地编译的...

这意味着像这样的东西:

#if DEBUG
//Do something
#endif

只有在 DEBUG 符号被定义时才会被编译和检查(当构建被设置为 DEBUG 时它被定义)。此外,在 IDE 中,预处理器符号之间的代码将显示为灰色。

这段代码:

if (env.IsDevelopment())
{
//Do something
}

为发布/调试环境编译。这里的关键是代码存在并且无论调试/发布环境如何都运行测试。在更复杂的情况下,这有两个影响:

  • 代码的执行可能会比较慢
  • 可执行文件会更大

此外,在发布环境中包含调试代码可能会泄露一些商业 secret 或其他重要信息(如果发布)。尽可能避免在 Release模式下发布调试代码。

关于c# - #if DEBUG 与 if (env.IsDevelopment()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48754986/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com