7

C#とXAMLを使用してMetroスタイルアプリ(Windows 8用)を開発しています。次のように、デザイン時のデータコンテキストとして使用するようにビューモデルを設定しました。

xmlns:vm="using:hub.ViewModels"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True, Type=vm:ViewModels

私のアプリは実行時に完全に機能しているように見えますが、VS 2012とBlendの両方のデザインビューで、次の(役に立たない)エラーメッセージが表示されることがあります。

An Exception was thrown. TargetException: Error in the application.
Stacktrace
at System.ComponentModel.PropertyChangedEventHandler.Invoke(Object sender, PropertyChangedEventArgs e)
InnerException: None

これはデザインビューでのみ発生します。つまり、すべてのINotifyPropertyChanged()イベントの周囲にブレークポイントを設定することはできません。

設計時エラーをデバッグするための最良のアプローチは何ですか?

4

3 に答える 3

22

これが一貫してまたは半一貫して発生する場合は、デバッガーをXAMLデザイナーにアタッチできます。

  1. VisualStudioを起動します。プロジェクトを開き、XAMLファイルを開いて、XAMLデザイナーをロードします

  2. VisualStudioの2番目のインスタンスを起動します。プロジェクトを開きますが、XAMLドキュメントが開いていないことを確認してください。

  3. [マイコードのみ]が無効になっていることを確認します。[ツール]メニューから[オプション]を選択します。デバッグカテゴリを選択します。[全般]ページで、 [マイコードのみを有効にする]の横のチェックボックスがオフになっていることを確認します。

  4. [デバッグ]メニューから[例外...]を選択し、[共通言語ランタイムの例外]の横にある[スロー]チェックボックスをオンにします。これにより、すべてのCLR例外のファーストチャンス処理が可能になります。例外の特定のタイプがわかっている場合は、そのタイプだけに対してファーストチャンス処理を有効にできます。

  5. [デバッグ]メニューから、[プロセスにアタッチ]を選択します。[添付先: ]フィールドで、[選択... ]をクリックし、リストの[管理対象(v4.5、v4.0) ]エントリを確認して、[ OK ]をクリックします。

    プロセスがネイティブコードを実行しているときにデバッガーが接続すると、デバッガーがプロセスをネイティブプロセスとして誤検出する可能性があるため、これが必要です。プロジェクトにネイティブコードが含まれている場合は、リストの[ネイティブ]チェックボックスもオンにする必要があります(管理対象コードとネイティブコードの両方を同時にデバッグできます)。

  6. [使用可能なプロセス]リストボックスで、プロジェクトに対応するxdesproc.exeを見つけて、[添付]をクリックします。

    複数のプロセスがある場合(通常、複数のプロジェクトを開いているため、またはデザイナーが再読み込み中または最近再読み込みしたため)、どのデザイナープロセスがどのVisualStudioインスタンスに属しているかを判断するのが難しい場合があります。多くの場合、それらすべてにアタッチするのが最も簡単です。Process Explorerのようなツールは、どのデザイナープロセスがVisualStudioのどのインスタンスに属しているかを把握するのに役立ちます。

    注:デバッグに使用しているVisual Studioの同じインスタンスに属するデザイナープロセス(xdesproc)にデバッガーを接続しないでください。接続すると、VisualStudioがハングする可能性があります。VisualStudioの2つの異なるインスタンスを常に使用する必要があります。

  7. バグを再現するために必要なことは何でもしてください。これが発生すると、例外がスローされた時点でデバッガーが中断します。デバッガーは、アセンブリのシンボルをロードする必要があります。

于 2012-08-03T23:18:51.900 に答える
5

rikkitと同じ問題はありませんでしたが、デザイナーのタイムインスタンスの問題をデバッグする方法についての情報を探しているときにここに来ました。しかし...同じ問題を抱えている他の人もここに到達した場合に備えて、関連する問題の解決策を共有しています:

[プロジェクトコードの有効化/無効化]トグルが[有効]に設定されていることを確認してください...VS/ Blend 2015では、 ここに示すように、XAMLエディターの下にある小さなアイコンです。

無効になっている場合は、これがデザインタイムインスタンスが機能していないように見える理由である可能性があります。

さらに、無効になっていて、2番目のVSインスタンスを使用してデバッグしようとすると、コードビハインドで設定したブレークポイントをXDesProcに接続すると、「現在ヒットしない。[理由]シンボルがないため]と報告されます。このドキュメント用にロードされました」。どういうわけかシンボルをロードする必要があると思うかもしれませんが、そうしようとして[モジュール]ウィンドウを開くと、リストにモジュールが表示されません。

この設定が無効になっているため、この問題で数時間を失いました。これが他の人が同じことをしないのに役立つことを願っています。

于 2016-06-22T20:18:12.763 に答える
0

よくわかりませんが、 IsInDesignModePropertyフィールドを確認できると思います。私は時々WinFormsでそうしなければならないことを覚えています。

このリンクも参照してください。WPFDesignerのロード障害のトラブルシューティング

于 2012-08-03T23:09:32.703 に答える