如何在C#中有条件地启用属性?"#if DEBUG"无效

Sea*_*ken 5 c# attributes c-preprocessor

C#中值得信赖的旧预处理程序指令在我编写时看起来效果很好:

#if DEBUG
...
(Some code)
...
#endif
Run Code Online (Sandbox Code Playgroud)

但是,条件块中包含的属性似乎继续得到处理,我得到错误指示.例如,[AssemblyVersion(...)]在条件块内围绕一个似乎没有任何影响.

我可以详细说明我们为什么要有条件地忽略[AssemblyVersion(..)],但它无关紧要.有任何想法吗?

Sco*_*man 8

这对我来说正常.在我的AssemblyInfo.cs文件中,我有以下内容:

#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
Run Code Online (Sandbox Code Playgroud)

查看Reflector中编译的程序集,我看到了正确的属性.

您应该确保您的DEBUG符号仅在项目属性中定义,而不是在代码中的任何其他位置定义为实际的#define DEBUG指令.如果直接在代码中定义它,它将仅对该文件有效,而不是整个项目.在项目属性中定义它将导致它对整个项目有效.