System.Deployment.Application を使用する ClickOnce アプリケーションのデバッグ
更新 : 2007 年 11 月
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 を使用することもできます。もちろん、実際の運用コードにこれらのメソッドの呼び出しをそのまま残さないようにします。
たとえば、WinForm アプリケーションを開発していて、このメソッドに関するイベント ハンドラがあり、その中に更新ロジックが含まれているとします。これをデバッグするには、ボタンがクリックされる前にアタッチして、ブレークポイントを設定します (適切なアーカイブ ファイルを開き、そこにブレークポイントを設定します)。
IsNetworkDeployed プロパティを使用してアプリケーションの配置時にのみ System.Deployment.Application API を呼び出します。この API は、Visual Studio 内でのデバッグ時には呼び出さないでください。