今日、最初のカミソリのページを書いていますが、#if debug #else #endif
の入力方法がわかりません
かみそりでプリプロセッサを入力するにはどうすればよいですか?
拡張メソッドを作成しました:
public static bool IsDebug(this HtmlHelper htmlHelper)
{
#if DEBUG
return true;
#else
return false;
#endif
}
次に、私のビューで次のように使用しました:
<section id="sidebar">
@Html.Partial("_Connect")
@if (!Html.IsDebug())
{
@Html.Partial("_Ads")
}
<hr />
@RenderSection("Sidebar", required: false)
</section>
ヘルパーはDEBUG/RELEASEシンボルでコンパイルされているため、機能します。
これは HttpContext
に組み込まれています :
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Means that debug="true" in Web.config
}
IMO、これはビューの条件付きコンパイルよりも意味があり、一部のテストシナリオに役立ちます。 ( コードチーフのコメント を参照してください。)
NullReferenceException
for HttpContext.Current
Alex Angasが述べた このソリューションでNullReferenceException
を取得し、少数の人々がこれが孤立したイベントではないかもしれないことを示すことに賛成しています。
私の推測では、HttpContext.Current
はCallContext
に格納されています。つまり、着信HTTPリクエストを処理するスレッドからのみアクセスできます。ビューが別のスレッドでレンダリングされている場合(おそらくプリコンパイル済みビューのソリューションですか?)、HttpContext.Current
のnull
値を取得します。
このエラーが発生した場合は、コメントでお知らせください。プリコンパイル済みビューを使用しているか、別のスレッドでビューが部分的にレンダリング/実行される可能性がある特別な設定を使用しているかどうかをお知らせください!
C#およびASP.NET MVC:ビューで#ifディレクティブを使用
実際、その答えには正しい答えがあります。モデルを介してデバッグモードであるかどうかを渡す必要があります。 (またはViewBag)すべてのビューがデバッグモードでコンパイルされるため。
これは質問に対する直接的な答えではないことはわかっていますが、デバッグ設定は実際にローカルで実行しているという事実と当然の結果であるため、テストのようなデバッグとしていつでもRequest.IsLocal
プロパティを使用できます。副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example :
@if (Request.IsLocal)
{
<link rel="stylesheet" type="text/css" href="~/css/compiled/complete.css">
}
else
{
<link rel="stylesheet" type="text/css" href="~/css/compiled/complete.min.css">
}
デフォルトでは、MVCビューはコンパイルされないため、#IF DEBUGはビューで機能しません。 IF DEBUG configにアクセスするためにビューをコンパイルしたい場合は、以下を行う必要があります。
次の属性をfalseからtrueに変更します
<MvcBuildViews>true</MvcBuildViews>
プロジェクトをリロードすると、ビューがコンパイルされます。
他の唯一の回避策は、コードビハインドで関数を使用することです。
public static Boolean DEBUG(this System.Web.Mvc.WebViewPage page)
{
var value = false;
#if(DEBUG)
value=true;
#endif
return value;
}
そして、ビューからそれを呼び出します:
if(DEBUG())
{
//debug code here
}
else
{
//release code here
}
私にとって、以下のコードは非常にうまく機能しています。
アプリケーションがデバッグの場合、ボタンが表示されますが、リリースの場合は表示されません。
@if (this.Context.IsDebuggingEnabled)
{
<button type="button" class="btn btn-warning">Fill file</button>
<button type="button" class="btn btn-info">Export file</button>
}
私の解決策は非常に愚かですが、うまくいきます。静的ファイルのどこかにグローバル定数を定義します。
public static class AppConstants
{
#if DEBUG
public const bool IS_DEBUG = true;
#else
public const bool IS_DEBUG = false;
#endif
}
次に、HTMLのRazorで使用します。
@if (AppConstants.IS_DEBUG)
{
<h3>Debug mode</h3>
}
else
{
<h3>Release mode</h3>
}