對於一直使用 Visual Studio 2010 開發 SharePoint 2010 方案的你們,您可能已經注意到說到自訂宣告提供者時,有些許的封裝獨特性。在 Visual Studio 2010 中,您可以建立新功能,而且可以輕易地將功能事件接收器加入新功能,只要以滑鼠右鍵按一下該功能,然後選取 [加入事件接收器] 功能表即可。這個功能很棒,因為它使得為您的方案撰寫程式碼 (而不是為了設定) 時變得很容易且很有效率。中斷連線將可派上用場,因為預設會新增的事件接收器繼承自 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 專案,然後將該類別與功能關聯的真正直覺方式。不過,有相當容易且巧妙的方式可處理此議題。

當我從往常的起點開始時,我深入研究此問題一陣子,我有一個已經寫好的自訂宣告提供者以及要安裝它的對應功能接收器。這兩個類別是單一專案的一部分。我決定我真的想要讓新功能封裝程式在 Visual Studio 2010 中可以運作,以下是我的處理方式。

1. 請完成您在自訂宣告提供者專案與要註冊的對應事件接收器的第一回合,然後完成它。您必須查看已編譯的組件,並取得組件的強式名稱以及事件接收器的類別名稱。

2. 將新專案新增至您的方案,然後以 SharePoint 2010「空的 SharePoint 專案」範本做為新專案的基礎。設定要部署成伺服器陣列方案的專案。

3. 以滑鼠右鍵按一下專案中的 [功能] 節點,然後選取 [新增] 功能。您的功能範圍應該限定為 [伺服器陣列],而且應該自動啟動。否則,請將功能屬性設定為適合您嘗試要執行的項目。以下是要點:請依照以下所述在此功能上設定這兩個屬性 (在 Visual Studio [屬性] 視窗中):

a. 接收器組件:將強式名稱放入步驟 #1 所述的組件中,例如 MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701

b. 接收器類別:將您撰寫的類別名稱放入步驟 #1 的自訂宣告提供者中,例如 MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver

4. 將您編譯的自訂宣告提供者組件新增至您的封裝方案要部署的組件清單。若要這樣做,請在 Visual Studio 封裝專案中按兩下 Package.package 節點。按一下 [進階] 索引標籤。依序按一下 [加入] 按鈕和 [加入現有組件] 功能表。找到編譯的自訂宣告提供者組件的正確位置,並將 [部署目標: GlobalAssemblyCache] 保持在選取的狀態 (預設為選取)。按一下 [確定] 按鈕以儲存您的變更,然後關閉 [套件] 屬性視窗。在此有一件事值得注意,我通常只在我的封裝專案中建立一個資料夾,在此資料夾中我會從其他要隨方案發佈的專案中複製已編譯的組件。當我在 [封裝] 中設定其他組件時,我只要從封裝專案的資料夾中選取。在我其他的專案中,我有一個建置後指令碼,會自動將已編譯的組件複製到封裝專案的此組件資料夾中。它是很簡單的一行建置後程式碼,不論組件是偵錯組建或發行組件,都會複製組件,因此我不需要記得每次都要自己去複製它。它看起來像這樣:

 

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

您的套件現在已完成。您只需要編譯套件專案,然後從專案的右鍵功能表中選取 [套件] 功能表。最後您會得到一個可以發佈的 WSP 檔案,並使其自動首度發行您的自訂宣告提供者。

這是翻譯後的部落格文章。英文原文請參閱 Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project