编程语言
首页 > 编程语言> > c# – #if DEBUG vs if(env.IsDevelopment())

c# – #if DEBUG vs if(env.IsDevelopment())

作者:互联网

当你想在调试/开发和发布/生产中有不同的行为时,似乎可以使用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核心环境名称(.NET核心的一个新功能).这与关于#if和条件属性的其他问题不同

解决方法:

预处理程序指令是有条件编译的……

这意味着这样的事情:

#if DEBUG
    //Do something
#endif

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

这段代码:

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

是为发布/调试环境编译的.这里的关键是代码存在,并且无论环境是调试/发布,测试都会运行.在更复杂的场景中,这有两个影响:

>代码的执行可能会更慢
>可执行文件会更大

另外,在发布环境中包括调试代码可能会在发布时泄露一些商业机密或其他重要信息.尽可能避免在发布模式下释放调试代码.

标签:c,asp-net-core,debug-symbols
来源: https://codeday.me/bug/20190717/1486440.html