6

何らかの理由で、次の行は ASP.NET MVC プロジェクトで何もしません。

  System.Diagnostics.Debug.Assert(false);

デバッグ構成を使用していることと、デバッグ構成設定で「デバッグ定数を定義する」がチェックされていることをトリプルチェックしました。

私のユニットテストプロジェクトでも同じ問題が発生します。

独自の assert メソッドを実装するのは些細なことのように思えますが、少し厄介です。これを修正する方法についてのヒントは大歓迎です。

編集:プロジェクトでいくつかのサードパーティ モジュールを使用しています。これは、リリース モードでコンパイルされたモジュールを参照することによって引き起こされる可能性がありますか?

4

3 に答える 3

6

Web ページが VisualStudio を介して表示されている間、ASP.Net アサーションは VS コンソールに表示されます。プログラミング言語のように MsgBox を表示したり、アサーション行にブレークするためにスレッドを中断することはありません。

于 2010-05-14T01:01:26.520 に答える
1

古い質問ですが、デフォルトのリスナーが定義されていない場合、通常どおりメッセージダイアログは表示されません。実際に発火して食べられるだけなのか(これが原因だと思います)、まったく発火しないのかは確認していません。

しかし、いずれにしてもダイアログは表示されません。

DefaultTraceListenerのドキュメントから

Assert および Fail メソッド呼び出しのメッセージ ボックスの表示は、DefaultTraceListener の存在によって異なります。DefaultTraceListener が Listeners コレクションにない場合、メッセージ ボックスは表示されません。

DefaultTraceListener は、要素、要素、または Listeners プロパティ (System.Diagnostics.Trace.Listeners.Clear()) で Clear メソッドを呼び出すことによって削除できます。

以下のようなコードを使用して、リスナーをチェックしてタイプを取得できます。

 var listeners = new TraceListener[Debug.Listeners.Count];
 Debug.Listeners.CopyTo(listeners, 0);
 foreach (var listener in listeners) {
    Debug.WriteLine("Name : {0} of type : {1}", listener.Name, listener.GetType());
 }

「デフォルト」と呼ばれるものがない場合、Debug.Assertサイレントに失敗します。

構成に関する限り、これは Default という名前のリスナーが利用可能であると仮定して機能します。

<system.diagnostics>
    <trace autoflush="false">
        <listeners>
        </listeners>
    </trace>
</system.diagnostics>

これは、Default という名前のリスナーが利用可能であると仮定して機能します。

<system.diagnostics>
    <trace autoflush="false">
        <listeners>
           <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
        </listeners>
    </trace>
</system.diagnostics>

デフォルトを明示的に定義すると、これは機能します。

<system.diagnostics>
    <trace autoflush="false">
        <listeners>
           <remove name="Default" />
           <add name="Default" type="System.Diagnostics.DefaultTraceListener" />
           <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
        </listeners>
    </trace>
</system.diagnostics>

これは機能しません:

<system.diagnostics>
    <trace autoflush="false">
        <listeners>
           <remove name="Default" />
           <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/>
        </listeners>
    </trace>
</system.diagnostics>

web.config に診断セクションがない場合、デフォルトが一部の VS 拡張機能などによって削除またはオーバーライドされる可能性があるため、このセクションを追加すると、期待どおりの動作に戻るはずです。

于 2015-04-11T07:59:35.210 に答える
0

ASP.NET MVC を実行しているため、問題の原因となっている web.config に debug=false が存在する可能性がありますか?

于 2009-12-29T17:48:22.247 に答える