Visual Studio忽略#if DEBUG/RELEASE范围内的代码,不检查错误或自动完成

use*_*322 6 c# preprocessor-directive visual-studio-2017 visual-studio-2019

我已经写了#if DEBUG,#else,#endif的代码片段中,我注意到的Visual Studio不会让我用自动完成履行部分类型的成员名称,它不检查灰色激活代码错误.我发现再次关注的唯一方法是将构建模式从Debug切换到Release.但这很不方便,感觉有更好的方法.

例:

#if DEBUG
    throw;
#else
    throw new exc // I want to use autocomplete here but can't because it's greyed out
#endif
Run Code Online (Sandbox Code Playgroud)

如何让VS停止忽略其他配置范围内的其他代码#if DEBUG

Pra*_*ngh 7

它是条件编译的目的,它按预期工作.使用条件编译应用程序可以在编译时忽略某些代码.您在Visual Studio中的应用程序正在调试模式下运行,因此编译器忽略了#else部分内部的代码.

发布模式下运行您的应用程序,然后#else代码将可用但 #if DEBUG不可用.

在此输入图像描述

更新


要检查两者#if DEBUG,#else您需要运行两次应用程序.

1.一旦在调试模式下,代码#if DEBUG如下:

在此输入图像描述 在此输入图像描述

此处应用程序处于调试模式,因此#if DEBUG条件代码处于活动状

  1. 发布模式下运行应用程序以检查#else条件中的代码.其他部分也可以使用自动完成和调试.

在此输入图像描述 在此输入图像描述


有关详细信息,请参阅microsoft docs:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/debug-compiler-option

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/listed-by-category