在我的项目的“属性”使用条件编译符号我有以下几点:在MVC意见
我要检查,如果TEST
符号存在,也只有这样,做一些事情。 所以我做了你在下面的图片和课堂上看到的作品。但是这在视图中不起作用。
在此块中的文字是灰色的,即使TEST
定义!
如果TEST
被定义,我该如何使它工作?
在我的项目的“属性”使用条件编译符号我有以下几点:在MVC意见
我要检查,如果TEST
符号存在,也只有这样,做一些事情。 所以我做了你在下面的图片和课堂上看到的作品。但是这在视图中不起作用。
在此块中的文字是灰色的,即使TEST
定义!
如果TEST
被定义,我该如何使它工作?
问题是相关的事实,观点只在编译时您运行应用程序,因此您定义的TEST
符号不再由编译器应用,因为它不知道它。
假设你使用的是C#,你需要配置编译器使用TEST
标志性建筑的看法时,为此您使用需要override its configuration在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>
的重要组成部分,是你定义compilerOptions="/define:TEST"
。剩下的配置需要适应您的特定需求,例如在.NET 2.0或.NET 4.0之间切换。
如果您直接在Web.config
中应用此操作,它将起作用,但每次都会定义TEST
。所以你应该做的是使用Web.config transformations,这样符号只适用于正确的构建配置。
您设置的符号仅在编译期间使用。否则不存在。所以,你的web项目的DLL确实有而不是有这个符号。因此,编译View时。该符号不存在,并且不会像您所期望的那样工作。
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>
}
}
而不是在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>
}
这与Dangerous建议的效果不一样吗? –
不,不同之处在于我使用的是在构建时自动设置的标志(请参阅我的答案的第一句)。 –
是的,现在文本不是“灰色” - 但它可以或者如果我删除“测试”或不...“ – ParPar
你需要同步'TEST'的两个定义。如果从项目属性中删除它,则还需要将其从配置中删除。 –
我明白了,非常感谢! – ParPar