SharePoint 2010 のカスタム クレーム プロバイダーを Visual Studio 2010 SharePoint プロジェクトにパッケージする

これまで、SharePoint 2010 ソリューションの開発に Visual Studio 2010 を使用した経験があれば、カスタム クレーム プロバイダーをパッケージするときに通常とは少し異なる特徴があることにお気づきでしょう。 Visual Studio 2010 では、新規作成したフィーチャーを右クリックして [イベント レシーバーの追加] (Add Event Receiver) メニューを選択するだけで、フィーチャー イベント レシーバーを簡単に追加できます。 ソリューションの構成ではなく、ソリューションのコーディングを操作するのは簡単なだけでなく生産的でもあり、とても有効です。 追加したイベント レシーバーは、既定で SPFeatureReceiver から継承されるので、切断が発生します。 ご存知のように、カスタム クレーム プロバイダーの登録に使用するイベント レシーバーは、SPClaimProviderFeatureReceiver (http://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx (英語)) から継承する必要があります。 また、Visual Studio の組み込み SharePoint スマートは、SharePoint 2010 プロジェクトにクラスを追加してフィーチャーに関連付ける操作を直観的に行うのに適していません。 ただし、これについては、簡単かつ有効な方法があります。

以下は、しばらく前に私自身が経験したことです。そのときには、自作のカスタム クレーム プロバイダーと、それをインストールするためのフィーチャー レシーバーがありました。 これらの 2 つのクラスは単一のオブジェクトの一部でした。 Visual Studio 2010 の新しいフィーチャー パッケージを利用できるようにしたかったので、次の操作を行いました。

1. カスタム クレーム プロバイダー プロジェクトと、それを登録するためのイベント レシーバーで 1 回目の実行を完了し、それをコンパイルしました。 ここで、コンパイル済みのアセンブリを調べて、アセンブリの厳密な名前とイベント レシーバーのクラス名を取得しておくとよいでしょう。

2. ソリューションに新しいプロジェクトを追加し、SharePoint 2010 の "空の SharePoint プロジェクト" テンプレートを基に新しいプロジェクトを作成します。 そのプロジェクトをファーム ソリューションとして展開するように構成します。

3. プロジェクトの [フィーチャー] (Features) ノードを右クリックし、[フィーチャーの追加] (Add Feature) を選択します。 フィーチャーのスコープを [Farm] に設定し、自動的にアクティブになるように指定する必要があります。 また、実行内容に応じて、フィーチャーのプロパティを適切に構成することもできます。 ここで重要事項があります。Visual Studio の [プロパティ] ウィンドウで、フィーチャーのこれら 2 つのプロパティを次のように構成します。

a. レシーバー アセンブリ (Receiver Assembly): 手順 1. で説明したアセンブリの厳密な名前を指定します。たとえば、MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701 を指定します。

b. レシーバー クラス (Receiver Class): 手順 1. でカスタム クレーム プロバイダーを記述したクラスの名前を指定します。たとえば、MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver を指定します。

4. パッケージ ソリューションによって展開するアセンブリの一覧に、コンパイル済みのカスタム クレーム プロバイダー アセンブリを追加します。 これを行うには、Visual Studio パッケージ プロジェクトの [Package.package] ノードをダブルクリックします。 [詳細設定] (Advanced) タブをクリックします。 [追加] (Add) ボタンをクリックし、[既存のアセンブリの追加] (Add Existing Assembly) メニューをクリックします。 コンパイル済みのカスタム クレーム プロバイダー アセンブリの適切な場所を見つけ、[配置ターゲット] (Deployment Target) に GlobalAssemblyCache を選択したままにします (既定で選択されています)。 [OK] ボタンをクリックして変更内容を保存したら、[パッケージのプロパティ] (Package properties) ウィンドウを閉じることができます。 注意事項が 1 つあります。通常、私はパッケージ プロジェクト内にフォルダーを作成しておき、ソリューションで配布したいコンパイル済みのアセンブリがあればそれを他のプロジェクトからそのフォルダーにコピーしています。 追加のアセンブリを Package に構成する場合は、そのアセンブリをパッケージ プロジェクト内のそのフォルダーから選択するだけです。 他のプロジェクトでは、パッケージ プロジェクト内のこのアセンブリ フォルダーにコンパイル済みのアセンブリを自動的にコピーするビルド後スクリプトを用意しています。 ビルド後スクリプトは、わずか 1 行のシンプルなコードで、デバッグ ビルドであるか、リリース ビルドであるかに関係なく、アセンブリをコピーするので、その都度、自分でスクリプトを実行する必要はありません。 次のようなコードです。

copy "$(TargetPath)" ..\..\..\MyPackagingProject\GacFiles /Y

これでパッケージの完成です。 パッケージ プロジェクトをコンパイルしたら、そのプロジェクトを右クリックして [パッケージ] (Package) メニューを選択します。必要な操作はこれだけです。 これで WSP ファイルの完成です。このファイルを配布すれば、カスタム クレーム プロバイダーを自動的に展開できます。

これはローカライズされたブログ投稿です。原文の記事は、「Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project」をご覧ください。