🔰
ClickOnceアプリケーションの簡単なデバッグ方法
はじめに
ClickOnceというWindowsアプリケーションをWebページを通じて配布、更新する技術があります。ClickOnceで配布するアプリケーションをWebページから起動した場合のみ行われる処理をデバッグしたいことがありましたので、その時に使った方法を書き残します。
例
次のようなコードがあったとします。
Program.cs
using System;
using System.Deployment.Application;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
internal static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (ApplicationDeployment.IsNetworkDeployed)
{
// URLパラメーターの取得等の処理
}
Application.Run(new Form1());
}
}
}
Webページから起動した場合、ApplicationDeployment.IsNetworkDeployed == true
になり、// URLパラメーターの取得等の処理
が行われます。この// URLパラメーターの取得等の処理
をデバッグしたいです。
しかし普通にVisual Studioからデバッグを開始してもURLパラメーターを取得することができません。なのでClickOnceで発行してWebページに配置した状態でデバッグをする必要があります。
方法
デバッグしたい箇所の少し前にSystem.Diagnostics.Debugger.Launch()
を書き足します。
Debugビルドだけで動作するよう、ディレクティブ#if DEBUG
で囲んでいます。
Program.cs
using System;
using System.Deployment.Application;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
internal static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (ApplicationDeployment.IsNetworkDeployed)
{
+ #if DEBUG
+ System.Diagnostics.Debugger.Launch();
+ #endif
// URLパラメーターの取得等の処理
}
Application.Run(new Form1());
}
}
}
Debugビルドで発行した後、Webページから起動すると、デバッガを選択する画面が表示されるので、適当に選びます。
後はデバッガが起動するので、System.Diagnostics.Debugger.Launch()
の行からステップ実行できます。

株式会社ラグザイア(luxiar.com)の技術広報ブログです。 ラグザイアはRuby on RailsとC#に特化した町田の受託開発企業です。フルリモートでの開発を積極的に推進しており、全国からの参加を可能にしています。柔軟な働き方で最新のソフトウェアソリューションを提供します。
Discussion