Visual Studio ignores the code inside #if DEBUG / RELEASE scope and doesn't check for errors or autocompletes

拥有回忆 提交于 2019-12-01 02:44:42

问题


I've been writing an #if DEBUG, #else, #endif fragment of code, and I noticed that Visual Studio doesn't let me use autocomplete to fulfill partially typed member names, and it doesn't check the greyed out inactive code for errors. The only way I've found to make it care again is to switch the build mode from Debug to Release. But that's inconvenient and feels like there's a better way.

example:

#if DEBUG
    throw;
#else
    throw new exc // I want to use autocomplete here but can't because it's greyed out
#endif

How do I make VS stop ignoring the other code inside the other configuration's scope of #if DEBUG?


回答1:


It is purpose of conditional compilation, it is working as intended. With conditional compilation application can ignore certain code at compilation. Your application in Visual Studio is running in Debug Mode so compiler is ignoring code inside #elsepart.

Run your application in Release mode then #else code will be available but #if DEBUGwill not be available.

Update


For checking both #if DEBUG & #else you need to run application twice.

1.Once in debug mode in which code with #if DEBUG like :

here application is in debug mode so #if DEBUG condition code is active..

  1. Run application in release mode for checking code in #else condition. Here other part will be able to use autocomplete & debug too.


Refer microsoft docs for more info on this:

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




回答2:


I know this is a late answer, but it still applies to this day.

TL;DR: this is a VS bug, which affects only affects netstandard/netcore projects (or simply put, the new .csproj format).

The workaround is... nasty! Reload the project file (or close and reopen VS).

The good news: this does not affect compilation :)

You can read more here and here.




回答3:


At the beginning of the file define both constant:

#define DEBUG
#define RELEASE

Next, use two if condition instead of if/else.

#if DEBUG
            // autocomplete works
#endif
#if RELEASE
            // autocomplete works
#endif

Of course, you must delete/comment out these defines before compiling the project.

In my opinion, this awkward and fraught with mistakes.



来源:https://stackoverflow.com/questions/49610833/visual-studio-ignores-the-code-inside-if-debug-release-scope-and-doesnt-chec

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!