2011-07-19 6 views
2

私はDebug.Assert()のバージョンが必要です。リリースビルドでは引き続きconditionパラメータでコードを実行しますが、アサーションに失敗した場合はアサーションダイアログを表示しません。 .NET 3.5にこのようなツールがありますか?これを自分で実装する必要がありますか?リリース時に状態をチェックするDebug.Assert()のバージョンはありますか?

答えて

4

Trace.Assertを使用すると、リリースモードでも動作します。リスナを使用してダイアログを表示する方法以外の方法を使用する方法については、ドキュメントを参照してください。抜粋:

メッセージボックスの表示は、DefaultTraceListenerの存在によって異なります。 DefaultTraceListenerがListenersコレクションにない場合、メッセージボックスは表示されません。 DefaultTraceListenerは、または(System.Diagnostics.TraceリスナーのプロパティのClearメソッドを呼び出すことにより、<トレース>、<は<トレース>ため<リスナー>ため>要素を取り除くため<リスナー>ため<明らか>要素によって除去することができます.Listeners.Clear())。ですから、例えば

#if (!DEBUG) 
    System.Diagnostics.Trace.Listeners.Clear(); 
#endif 
+0

ありがとうございました。彼らが言及しているXMLは正確に何ですか?それはVisual Studio ProjectのXMLですか?何らかの形で、アプリケーションは、DefaultTraceListenerをいつデバッグ用に登録するのか、リリース用ではないのかを知る必要があります。 –

+1

XMLはあなたのapp.configファイルにあります。トレースオプションとデバッグオプションを定義することができます。ただし、リリースモードでクリアを定義するだけで済みます。私はそれを示すために私の答えを編集します。 –

0

なぜ単純にコードを実行し、Debug.Assertので結果を確認しますか?

bool isOk = CodeToBeExecuted(); 
Debug.Assert(isOk == true); 
+1

これで、Debug.AssertをTrace.Assertで簡単に検索して置き換えるのではなく、彼が主張をすべて書き直す必要があります。また、アサーションはもはや何が間違っているのかを彼に伝えません。彼らはすべて「isOKが失敗しました」だけです。 –

+0

それだけでなく、リリースでは未参照の変数を持つことになります(コンパイラの警告が出るかどうかはわかりませんが、C++ではわかります)。 –

関連する問題