System.Deployment.Application を使用する ClickOnce アプリケーションのデバッグ
Visual Studio では、ClickOnce の配置でアプリケーションの更新方法を構成できます。 しかし、高度な ClickOnce 配置機能を使用およびカスタマイズする必要がある場合は、System.Deployment.Application により提供される配置オブジェクト モデルにアクセスする必要があります。 次のような高度なタスクで System.Deployment.Application を使用できます。
条件に従ってオン デマンドでさまざまなアプリケーション コンポーネントをダウンロードする。
アプリケーションに直接統合された更新を行う。
クライアント アプリケーションが常に最新であることを保証する。
System.Deployment.Application は、アプリケーションを ClickOnce テクノロジで配置した場合にのみ機能します。したがって、この API をデバッグする唯一の方法は、ClickOnce を使用してアプリケーションを配置した後、アタッチしてからデバッグすることです。 このコードはアプリケーションの起動時に、デバッガーにアタッチ可能になる前に実行されるので、事前にデバッガーにアタッチすることは困難です。 チェック コードまたはオンデマンド コードを更新する前に、break (Visual Basic プロジェクトの場合は stop) を挿入することをお勧めします。
推奨されるデバッグ手法は次のとおりです。
まず、シンボル (.pdb) ファイルおよびソース ファイルがアーカイブされていることを事前に確認します。
アプリケーションのバージョン 1 を配置します。
新しい空白のソリューションを作成します。 [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。 [新しいプロジェクト] ダイアログ ボックスの [その他のプロジェクトの種類] ノードを開き、[Visual Studio ソリューション] フォルダーを選択します。 テンプレート ペインの [空のソリューション] を選択します。
この新しいソリューションのプロパティに、アーカイブしたソースの場所を追加します。 ソリューション エクスプローラーで、ソリューション ノードを右クリックし、[プロパティ] をクリックします。 [プロパティ ページ] ダイアログ ボックスで [デバッグ ソース ファイル] を選択し、アーカイブしたソース コードのディレクトリを追加します。 そうしない場合、古いソース ファイルのパスが .pdb ファイルに記録されるので、デバッガーが古いソース ファイルを検索することになります。 デバッガーで古いソース ファイルが使用されると、ソースが一致しないことを伝えるメッセージが表示されます。
デバッガーが .pdb ファイルを検索できることを確認します。 これらがアプリケーションと共に配置済みである場合、デバッガーにより自動的に検索されます。 常に、該当アセンブリの隣りが最初に検索されます。 それ以外の場合は、[シンボル ファイル (.pdb) の場所] にアーカイブ パスを追加する必要があります。このオプションを選択するには、[ツール] メニューの [オプション] をクリックし、[デバッグ] ノードを開き、[シンボル] をクリックします。
CheckForUpdate メソッドの呼び出しと Download/Update メソッドの呼び出しの間にある処理をデバッグします。
次に、更新コードの例を示します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If My.Application.Deployment.IsNetworkDeployed Then If (My.Application.Deployment.CheckForUpdate()) Then My.Application.Deployment.Update() Application.Restart() End If End If End Sub
バージョン 2 を配置します。
バージョン 2 の更新プログラムをダウンロードするときに、バージョン 1 アプリケーションへのデバッガーのアタッチを試みます。 また、System.Diagnostics.Debugger.Break メソッド (Visual Basic の場合は単純に Stop) を使用することもできます。 もちろん、実際の運用コードにこれらのメソッドの呼び出しをそのまま残さないようにします。
たとえば、Windows フォーム アプリケーションを開発していて、このメソッドに関するイベント ハンドラーがあり、その中に更新ロジックが含まれているとします。 これをデバッグするには、ボタンがクリックされる前にアタッチして、ブレークポイントを設定します (適切なアーカイブ ファイルを開き、そこにブレークポイントを設定します)。
IsNetworkDeployed プロパティを使用してアプリケーションの配置時にのみ System.Deployment.Application API を呼び出します。この API は、Visual Studio 内でのデバッグ時には呼び出さないでください。