在MVC视图中使用条件编译符号

Par*_*Par 9 views conditional-compilation asp.net-mvc-3

在我的项目的"属性"中,我有以下内容:

在此输入图像描述

我想检查TEST符号是否存在,然后才做一些事情.所以我做了你在下面的图片和它所在的课程中所看到的.但是这在视图中不起作用.

在此输入图像描述

即使TEST已定义,此块中的文本也是灰色的!

如果TEST定义了,我怎么能使它工作?

Eri*_* J. 14

而不是根据接受的答案在web.config中指定编译器标志(这也需要在web.config中指定编译器版本,这是非标准位置),我使用以下内容:

将方法添加到我的模型共享的基类

public bool IsDebugBuild 
{ 
    get
    {
        #if DEBUG
        return true;
        #else
        return false;
        #endif
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的视图中使用该方法

if (mm.IsDebugBuild) {
    <div class="debug">
    // Do Stuff
    </div>
}
Run Code Online (Sandbox Code Playgroud)


Joã*_*elo 10

问题与以下事实有关:仅在运行应用程序时编译视图,因此TEST编译器不再应用您定义的符号,因为它不了解它.

假设你使用的是C#,你需要配置编译器使用的TEST建设的意见时,符号,为此,你需要重写它的配置Web.config使用下列内容:

<system.codedom>
  <compilers>
    <compiler
      language="c#;cs;csharp"
      extension=".cs"
      type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
      compilerOptions="/define:TEST"
      warningLevel="1" />
  </compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)

重要的是你定义compilerOptions="/define:TEST".您需要的其余配置可以适应您的特定需求,例如在.NET 2.0或.NET 4.0之间切换.

如果你直接应用Web.config它,它将起作用,但TEST每次都会定义.因此,您应该真正做的是使用Web.config转换,以便该符号仅应用于正确的构建配置.