在我的项目的“属性”中,我有以下内容:
我想检查是否存在TEST
符号,然后才做一些事情。
所以我做了你在下面的图片和它所在的课程中所看到的。但是这在视图中不起作用。
即使定义了TEST
,此块中的文本也是灰色的!
如果定义了TEST
,我该如何使其工作?
答案 0 :(得分:13)
不是根据接受的答案在web.config中指定编译器标志(这也需要在web.config中指定编译器版本,这是一个非标准的位置),我使用了以下内容:
将方法添加到我的模型共享的基类
public bool IsDebugBuild
{
get
{
#if DEBUG
return true;
#else
return false;
#endif
}
}
在我的观点中使用该方法
if (mm.IsDebugBuild) {
<div class="debug">
// Do Stuff
</div>
}
答案 1 :(得分:10)
问题与以下事实有关:只有在运行应用程序时才编译视图,因此编译器不再应用您定义的TEST
符号,因为它不了解它。
假设您正在使用C#,您需要将编译器配置为在构建视图时使用TEST
符号,为此,您需要Web.config
中的override its configuration使用以下内容:< / p>
<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>
重要的是你定义compilerOptions="/define:TEST"
。您需要的其余配置可以适应您的特定需求,例如在.NET 2.0或.NET 4.0之间切换。
如果您直接在Web.config
中应用此功能,它会起作用,但每次都会定义TEST
。所以你真正要做的就是使用Web.config transformations,这样符号才会应用于正确的构建配置。
答案 2 :(得分:2)
您设置的符号仅在编译期间使用。否则就不存在了。因此,您的Web项目的DLL 不根本没有该符号。因此,编译View时。符号不存在,它不会像你期望的那样起作用。
答案 3 :(得分:1)
我不认为可以在视图中使用条件符号,正如Andrew Barber已经说过的那样。
但你可以在模型中使用条件符号:
public class ViewModel
{
//...whatever else you need to define
private bool test;
public bool Test
{
get
{
return test;
}
}
public ViewModel()
{
#if (TEST)
test = true;
#endif
}
}
然后检查视图中的值:
@{
if (Model.Test)
{
<p>debug statements here</p>
}
}