Expression Blend アプリケーションのデバッグ

Microsoft Expression Blend アプリケーションが予測どおりに動作しないか、アプリケーションのテスト時にエラーが発生する場合は、アプリケーションにバグが存在します。アプリケーションのバグの原因や発生場所を特定することが困難な場合もありますが、遭遇する可能性のあるバグの種類を把握しておくと役に立ちます。

構文エラー

アプリケーションのビルド時に構文エラーがある場合は、Expression Blend の [結果] パネルの [エラー] タブか、Microsoft Visual Studio 2008 の [エラー一覧] パネルに表示されます。

構文エラーは、Extensible Application Markup Language (XAML) またはコードが言語のフォーマット規則に従っていない場合に発生します。エラーの説明を参照すると、エラーの解決に役立ちます。説明では、エラーの発生しているファイルの名前と行番号も確認できます。構文エラーのよくある原因は次のとおりです。

  • キーワードのスペルまたは大文字の表記に誤りがある。

  • テキスト文字列の両側に引用符がない。

  • XAML 要素に終了タグがない。

  • XAML 要素が許可されていない場所にある。これらのエラーは、Expression Blend の [デザイン] ビューまたは Visual Studio 2008 でドキュメントを編集することによって回避できます。

  • コード ファイルで、関数またはメソッドの呼び出しに、必要なパラメータが含まれていない。たとえば MessageBox.Show() メソッドには、少なくとも 1 つのパラメータ (文字列 MessageBox.Show("Hello") など) が含まれている必要があります。

  • コード ファイルで、ある型の変数が異なる型に割り当てられている。たとえば MessageBox.Show() メソッドは、文字列型の引数を含むことができますが、整数型の引数を含むことはできません。

  • C# で、引数が不要なメソッドの末尾に中かっこが含まれていない。たとえば this.InitializeComponent; では構文エラーが発生します。正しい表記は this.InitializeComponent(); です。

XAML 構文の詳細については、MSDN の「Windows Presentation Foundation」のセクションにある「コントロール ライブラリ」で個々のコントロールのトピックを参照してください。プログラミングの構文については、MSDN でコードのキーワードを検索できます。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

コンパイル エラー

アプリケーションのビルド時にコンパイル エラーがある場合は、Expression Blend の [結果] パネルの [エラー] タブか、Visual Studio 2008 の [エラー一覧] パネルに表示されます。

コンパイル エラーは、Expression Blend または Visual Studio 2008 のコンパイル システムで、プロジェクトに必要なものが見つからない場合に発生します。たとえば、WPF プロジェクトに WPF アセンブリへの参照がない場合、"名前 'Window' は、名前空間 'http://schemas.microsoft.com/winfx/2006/xaml/presentation' に存在しません" などのエラーメッセージが表示されます。このエラーが表示された場合、[プロジェクト] メニューの [参照の追加] をクリックし、C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5 フォルダに次の WPF アセンブリへの参照を追加します。

  • PresentationCore.dll

  • PresentationFramework.dll

  • WindowsBase.dll

これでも "名前 '<member>' は現在のコンテキストに存在しません" などのエラーが表示される場合は、他のアセンブリ参照も見つからないか、不足している名前空間用に using ステートメント (C# の場合) または Imports ステートメント (Visual Basic .NET の場合) をコードに追加する必要がある可能性があります。必要なアセンブリまたは名前空間を見つけるには、MSDN で、エラーの原因になっているメンバの参照トピックを参照してください。

その他、コンパイル エラーのよくある原因は次のとおりです。

  • キーワードのスペルまたは大文字の表記に誤りがある。

  • アプリケーションで、クラスが適切に参照されていない。たとえば、別の .cs または .vb コード ファイル (Microsoft Silverlight 1.0 プロジェクトの場合は .js コード ファイル) で実装され、独自の名前空間を持つカスタム クラスをアプリケーションで使用する場合は、そのカスタム クラスを使用するアプリケーションのドキュメントに、以下のような行を追加する必要があります。FullyQualifiedNamespace は、コード ファイル内の名前空間です。

    xmlns:SampleNamespace="clr-namespace:FullyQualifiedNamespace"
    
  • コンパイラ オプションが適切に設定されていないか、システムが Microsoft .NET Framework ベースのアプリケーションをビルドできない。Microsoft .NET Framework 3.5 がインストール済みで、Expression Blend または Visual Studio 2008 を使用してアプリケーションのビルドを行う場合、これは問題になりません。

  • プロジェクトをビルドする前に、ファイルが保存されていない。たとえば、Expression Blend の [イベント] パネル Cc294906.6c67bb3b-e8a2-4a63-bad5-54d5c15b04dd(ja-jp,Expression.10).png を使用して、コードビハインド ファイルに新しいイベント ハンドラ メソッドを生成した後 (つまり、Visual Studio でコードビハインド ファイルを表示した後) に、コードビハインド ファイルを保存しないで Expression Blend でプロジェクトをビルドしようとすると、プロジェクトにイベント ハンドラの定義が含まれていないことを通知するエラーが表示されます。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

実行時エラー

アプリケーションをビルドして (Expression Blend で F5 キーを押して) 実行したときに予期しない動作をする場合が実行時エラーです。実行時エラーは、ロジックにエラーが含まれるため、原因の特定が困難です。XAML またはコードに変更を加えながら処理を検証して、実行時エラーを解決できることもあります。しかし実際には、アプリケーションのコードを 1 行ずつステップ実行しながら検証していく方が、早く原因を特定できます。詳細については、このトピックで後に説明する「Debugging in Visual Studio 2008」を参照してください。

実行時エラーのよくある原因は次のとおりです。

  • XAML 要素が適切にレイアウトされていないか、誤ったパネル要素が他の要素の収容に使用されている。レイアウトの詳細については、このガイドの「レイアウト システム」を参照するか、MSDN の WPF のセクションにある「レイアウト システム」と「整列、余白、パディングの概要」を参照してください。

  • XAML 要素が適切なイベント ハンドラに接続されていない。多数のイベント ハンドラ メソッドを作成し、誤ったメソッドを XAML 要素に割り当てた場合に発生します。Expression Blend で開く WPF プロジェクト内の XAML 要素に割り当てられるイベント ハンドラを確認するには、[組み合わせ] パネルの [オブジェクトとタイムライン] で要素を選択し、[プロパティ ] パネルの [イベント] ボタンをクリックします。詳細については、このユーザー ガイドの「イベント処理とユーザー操作」を参照してください。Silverlight 1.0 では、このエラーは、ルート要素に対するイベント ハンドラを次のコードを使用してフックする操作を、

    rootElement.addEventListener(…);
    

    ドキュメントの子要素に対するイベント ハンドラを次のようなコードを使用してフックする代わりに実行した場合に発生することがあります。

    this.control.content.findName("WebLink").addEventListener(…);
    

    詳細については、「Silverlight アプリケーションのストーリーボードを制御するボタンの作成」を参照してください。

  • Expression Blend のアニメーション トリガが適切に設定されていない。たとえば、アプリケーションの読み込み後に、アニメーション ストーリーボードを停止または一時停止できるようにする場合は、トリガで開始する必要があります。アニメーション ストーリーボードは、既定で Window.Loaded トリガで開始されますが、変更することができます。詳細については、このユーザー ガイドの「アニメーション」を参照してください。アニメーション トリガの例については、「単純なアニメーションの作成」、または「簡易スタイル」の「試してみよう」 セクションのトピックを参照してください。

  • コード ファイルの変数が、存在しないオブジェクトを参照している。たとえば、WPF プロジェクトのコードビハインド ファイルでは、行 this.InitializeComponent() が出現する前に XAML オブジェクトを参照することはできません。これを行った場合は、XamlParseException エラーが発生します。

  • コード ファイルに、予期しないコード パスにアプリケーションを進行させる前提条件が設定されている。この状況に対しては、Visual Studio 2008 でのアプリケーションのデバッグで、コードを 1 行づつ実行すると大きな効果があります。詳細については、このユーザー ガイドの「Visual Studio 2008 での Expression Blend アプリケーションのデバッグ」を参照してください。

  • コードビハインド ファイルで、ユーザー インターフェイス (UI) の更新が、別スレッドで実行する必要がある他のプログラム ロジックと同じスレッドで実行されている。たとえば、Label に表示されるテキストを更新し、他の計算を実行し、完了前に再び同じ Label のテキストを更新するイベント ハンドラ メソッドを作成する場合、最後の更新しか表示されません。これは、UI のレンダリングがイベント ハンドラ メソッドの最後に発生し、すべての処理が同じスレッドで行われるため、アプリケーションはメソッドが UI の更新を実行している間にいったん時間をとることができないからです。複数の UI の更新と計算を行う WPF アプリケーションの作成方法の詳細については、MSDN の WPF のセクションにある「スレッド モデル」を参照してください。

  • コードビハインド ファイルのイベント ハンドラ メソッドで、UI 要素またはそのプロパティが、有効になる前に参照されている。たとえば、WPF プロジェクトの Window1() コンストラクタ メソッドでは、まだ UI 要素にアクセスすることができません。OnInitialized() イベント ハンドラ メソッドでは UI 要素にアクセスすることができますが、UI 要素がまだレイアウトされていないため、ActualWidth などのプロパティを検証することはできません。OnLoaded() イベント ハンドラ メソッドでは、XAML ドキュメントに存在する UI 要素に必要な処理をすべて実行できます。詳細については、MSDN の WPF のセクションにある「オブジェクトの有効期間イベント」を参照してください。イベントおよび発生のタイミングの一覧については、このユーザー ガイドの「WPF イベント クイック リファレンス」を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

-

Visual Studio 2008 でのデバッグ

Expression Blend は、WPF ベースのアプリケーションと Silverlight 1.0 アプリケーションで使用できる機能豊富なユーザー インターフェイスを作成するためのデザイン ツールです。Visual Studio 2008 で Expression Blend プロジェクトを開き、ビルドし、デバッグすることができます。Expression Blend のテスト機能 (F5 キー) を使用したアプリケーションのデバッグに問題がある場合、Visual Studio 2008 を使用して、実行時エラーに関する詳細なエラー メッセージを取得できます。詳細については、このユーザー ガイドの「Visual Studio 2008 での Expression Blend アプリケーションのデバッグ」を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

パフォーマンスの問題のデバッグ

WPF では、アプリケーション実行時の動作分析と、パフォーマンスを向上する方法の特定に役立つパフォーマンス評価ツール セットを利用できます。詳細については、MSDN の WPF のセクションにある「WPF のパフォーマンス プロファイリング ツール」と「WPF アプリケーションのパフォーマンスの最適化」を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

イベントのトレース

.NET の詳しい知識があるプログラマであれば、WPF アプリケーションにコードを追加して、複雑なバグのデバッグに役立つカスタム デバッグ イベントをトリガすることができます。この機能は、Event Tracing for Windows (ETW) と呼ばれます。WPF イベント トレース プロファイル ツールでは、ETW を使用してイベントのログを記録します。詳細については、MSDN の「WPF のパフォーマンス プロファイリング ツール」に記載されているイベント トレースと PresentationTraceSources の説明を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

複合型アプリケーションのデバッグ

WPF 以外に、Windows Forms などの別の技術も使用するアプリケーションでは、予期しない重複動作、拡大縮小、コントロール フォーカスなどの問題が発生することがあります。複合型アプリケーションのデバッグに役立つ情報については、MSDN の WPF のセクションにある「ハイブリッド アプリケーションのトラブルシューティング」を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

セキュリティ

デバッグ中、アプリケーションでは他のユーザーが使用するときと同じセキュリティ許可が保持されます。詳細については、このユーザー ガイドの「Expression Blend アプリケーションの展開と発行」を参照してください。WPF アプリケーションのセキュリティの詳細については、MSDN の WPF のセクションにある「セキュリティ (WPF)」を参照してください。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る

ヘルプ情報の入手

Expression Blend アプリケーションのデバッグについてサポートが必要な場合は、Windows Presentation Foundation (WPF) で、問題に関連する投稿を検索したり、質問を投稿したりできます。

Cc294906.7e183f1f-37d8-4dcb-980c-19a5d61ca087(ja-jp,Expression.10).gif先頭に戻る