を条件付きコンパイルシンボルを使用:私は、次のしているMVCのビューに私のプロジェクトの「プロパティ」で
を私はTEST
シンボルが存在するかどうかを確認したい、とだけにして、いくつかのことを行います。 私はあなたが下の図とそれが働くクラスで見たことをしました。しかし、これはビューでは機能しません。
このブロック内のテキストはTEST
が定義されている場合でも、グレーです!
TEST
が定義されている場合、どうすれば動作させることができますか?
を条件付きコンパイルシンボルを使用:私は、次のしているMVCのビューに私のプロジェクトの「プロパティ」で
を私はTEST
シンボルが存在するかどうかを確認したい、とだけにして、いくつかのことを行います。 私はあなたが下の図とそれが働くクラスで見たことをしました。しかし、これはビューでは機能しません。
このブロック内のテキストはTEST
が定義されている場合でも、グレーです!
TEST
が定義されている場合、どうすれば動作させることができますか?
問題は景色だけコンパイルされているという事実に関係していますアプリケーションを実行して、定義したTEST
シンボルが認識されないため、コンパイラによって適用されなくなります。
<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>
重要な部分があることである:あなたはビューを構築するときTEST
記号を使用するようにコンパイラを設定する必要があり、このためにあなたは、以下のものを使用してWeb.config
にoverride its configurationに必要なC#を使用していると仮定すると
compilerOptions="/define:TEST"
を定義します。残りの設定は、特定のニーズに合わせて調整する必要があります(たとえば、.NET 2.0または.NET 4.0の切り替えなど)。
あなたはWeb.config
で直接これを適用した場合、それは動作しますが、TEST
たびに定義します。実際に行うべきことは、Web.config transformationsを使用することです。そのため、シンボルは正しいビルド構成にのみ適用されます。
設定したシンボルは、コンパイル時にのみ使用されます。それ以外の場合は存在しません。だから、あなたのウェブプロジェクトのDLLはではありません。にはそのシンボルがありません。したがって、ビューがコンパイルされるとき。シンボルはそこにはなく、あなたが期待しているとおりに動作しません。
私は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でコンパイラフラグを指定Iは、以下で行った:
私のモデル
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