コンテナ内で実行されているSitecoreの開発プログラムをデバッグする方法

samatsu 8/26/2020 1259 N/A Sitecore Development

Sitecore 10では、コンテナを使用したSitecoreのデプロイがサポートされています。開発用と運用用のSitecoreのコンテナを展開するひな型の設定ファイルなども提供されています。

今回は、開発用に展開したコンテナで動作するSitecoreのContent Managementサーバー上にデプロイした従来のMVCプログラムをデバッグする方法と、Rendering Host(ASP.NET Core)でプレゼンテーションを実施した場合に、Rendering Hostサーバー上のプログラムをデバッグする方法も記載します。

前提の環境は次の通りです。

  • Visual Studio 2019
  • Sitecore 10(コンテナ内で動作)

1. SitecoreのContent ManagementサーバーにデプロイしたMVCプログラムをデバッグする

デバッグビルドしたプログラム(pdbファイル付き)をCMサーバーのコンテナにデプロイしたことが前提です。あとは、デバッグし高い場所にブレークポイントを設定します。

Visual Studioでソリューションを開き、デバッグしたい行でF9キーをタイプするなどしてブレークポイントを設定してください。

次に、プロセスにアタッチします。プログラムはコンテナ内で動作しているので、コンテナウィンドウを開きます。Visual Studioの View > Other Windows > Containers をクリックします。

ローカルで動作しているコンテナの一覧が表示されます。デバッグしたいコンテナを選んで、プロセスにアタッチをクリックします。今回はコンテンツ編集サーバー(CMサーバー)をデバッグしたいので、 cm_1 という名前のコンテナを選択しています。

Attach to Processダイアログが表示されます。コンテナを選びなおしたい場合は、 Findボタンをクリックしてコンテナを選びなおしてください。

次に、Show process from all users にチェックし、プロセス一覧から w3wp を選択します。この時 Attach To で Automatic にしていると、アタッチするコードがNative Codeと判定されたので、 Select ボタンをクリックします。

Debug these code typesを選択し、 Managed(v4.6,v4.5,v4.0) にチェックして、OKをクリックします。

下図のようになったら、Attachをクリックします。

これで、ブレークポイントをセットした場所で、デバッグできるようになります。

2. レンダリングホスト(Rendering Host)のASP.NET Coreプログラムをデバッグする

Sitecore 10では、ASP.NET Coreを使用したページのレンダリングもサポートされています。この場合は、レンダリング(HTMLの生成)は、独立したサーバー(Rendering Host)で行われます。

Rendering Hostで動作しているASP.NET  MVCをデバッグしたい場合は、Visual Studioでデバッグ実行するのが簡単ですが、コンテンツマネジメントサーバーで動作するMVCプログラムをデバッグしたときと同様にプロセスにアタッチしてデバッグできます。

今回は、サーバーのプロセスにアタッチする方法をせっかくなので記載しておきます。

コンテナウィンドウが表示されていない場合は、 Visual Studioのメニューから View > Other Windows > Containers を選択します。

Containersウィンドウで レンダリングホストサーバーを選択します。デフォルトのテンプレートに従って環境をセットアップした場合は 名前の一部に rendering という文字が含まれています。その後、 プロセスにアタッチをクリックします。

プロセスにアタッチダイアログで、ASP.NET Coreのプロセスを選択します。Attach toで、自動判定にしていると、 Managed(CoreCLR) code とアタッチするプロセスが判定されます。そうなっていない場合は、Selectボタンをクリックして、Managed (CoreCLR)を明示的に選択してください。あとは、Attachボタンを押すだけです。

Visual Studioを使用すると、コンテナで動作するSitecoreでもローカルにインストールしたSitecoreで動作するコードをデバッグするのと同じくらい簡単に開発したプログラムをデバッグできます。