9

Debug.Assert は Metro アプリではトリガーされませんが、プロジェクトが Console や WinForm などの従来のプロジェクトである場合はトリガーされます。はい、デバッグモードです。

Visual Studio(11 Beta)での設定が正しくないのでしょうか? または、メトロ アプリで Debug.Assert を無効にすることを意図していますか?

Metro アプリの実行中に多くの例外が飲み込まれることは知っていますが、Debug.Assert は非常に便利なので、無効にする理由が思いつきません。

4

3 に答える 3

6

バグのようです。独自のassertメソッドを展開します。何かのようなもの:

[Conditional("DEBUG")]
public static void Assert(bool condition)
{
    if (!condition)
        System.Diagnostics.Debugger.Break();
}
于 2012-05-10T16:08:38.230 に答える
2

トリガーします。出力ウィンドウを見てください。デバッガーを中断するかどうかを尋ねるプロンプトが自動的に表示されないため、モーターを使用し続けます。

DefaultTraceListener.AssertUIEnabledプロパティはfalseです。これは実装上の問題であり、MetroUIの上にメッセージボックスを表示できません。これは実際には機能しますが、モニターがデスクトップに切り替わります。[いいえ]をクリックしたい場合はかなり望ましくありません。解決するのは難しく、やることリストに間違いありません。プロパティに簡単にアクセスしてtrueに設定することはできません。メタデータからはアクセスできません。フィリップの回避策は半ばまともなように聞こえます。

于 2012-05-11T01:14:45.967 に答える
0

VS2013 の WinRT の F# にも同じ問題があります。のassertエイリアスであるステートメントはSystem.Diagnostics.Debug.Assert例外を発生させないため、出力ウィンドウを監視していない限り、アサーションは気付かれずに失敗する可能性があります。見ていても、主張のあった場所を見つけるのは難しい。

私は Filip の提案に従い、次のような短いユーティリティを作成しました。

namespace MyProj.Infrastructure

module Diagnostics =

    let Assert condition = if not condition then
                                System.Diagnostics.Debugger.Break()

Debugger.Breakアサーションが失敗した場所でデバッガーが停止するため、例外を発生させることを選択しました。ただし、例外を発生させることは、受け入れ可能な代替手段です。

適切なグローバル プロジェクトやモジュールがソリューションに既に含まれていなかったため、このためだけにそれらを作成する必要があり、非常に面倒でした。

于 2014-06-05T03:54:42.190 に答える