未知的常量SCALABILITYTESTING

时间:2011-06-10 11:31:02

标签: c#

我在网络服务中有一些奇怪的代码。

#if SCALABILITYTESTING
Random r = new Random();
#endif

我在Google上进行了一些搜索,但没有发现任何有用的信息。 Web服务是用C#编写的。它所在的项目有微软单元测试。

显然,它说这个变量是否为真,然后创建一个新的随机数,我的猜测是,当我运行Microsoft单元测试时,会触发这个。

之前我没见过这样的东西,所以我想知道它是什么。

我唯一的其他线索是以下代码,位于页面的最顶层。

//#define SCALABILITYTESTING
#define SOAPSECURITY
#define SOFTWAREFEATURES

Visual Studio突出显示#define

我不知道下面的stackoverflow问题是否相关,我的猜测是这与DEBUG和TRACE常量类似。

Define new compile-time constant in C# (for #if)

EDIT 我发现这些链接似乎有关。
http://msdn.microsoft.com/en-us/library/yt3yck0x.aspx
http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx

2 个答案:

答案 0 :(得分:1)

问题是相关的,它类似于DEBUG和TRACE。这是一个条件编译符号。这些可以在项目属性中定义,也可以直接在#define的代码中定义 我假设,开发人员定义它,改变他的测试或代码本身的方式来模拟一次访问Web服务的多个用户 - 或类似的。

答案 1 :(得分:1)

这些是条件编译符号,在C# Language Specification的第9.5节中定义。顾名思义,如果定义或未定义某些编译符号,它允许您省略编译的某些部分。

来自规范:

  

条件编译符号   两种可能的状态:定义或   未定义。在开始时   词汇处理源文件,a   条件编译符号是   未定义,除非它已经   由外部明确定义   机制(例如命令行)   编译器选项)。当#define时   指令被处理了   条件编译符号命名   在该指令中定义   那个源文件。符号仍然存在   定义直到#undef指令为止   处理相同的符号,或   直到源文件结束   到达。这意味着   #define和#undef指令   一个源文件没有效果   其他源文件相同   程序

     

有条件的名称空间   编译符号是不同的   与所有其他命名实体分开   在C#程序中。条件   编译符号只能是   在#define和#undef中引用   指令和预处理   表达式。