在我的項目的「屬性」使用條件編譯符號我有以下幾點:在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