Packen eines benutzerdefinierten Anspruchsanbieters von SharePoint 2010 in einem Visual Studio 2010-SharePoint-Projekt
Wenn Sie schon einmal Lösungen für SharePoint 2010 mit Visual Studio 2010 entwickelt haben, werden Sie vielleicht beim Packen benutzerdefinierter Anspruchsanbieter eine Besonderheit bemerkt haben. In Visual Studio 2010 können Sie eine neue Funktion erstellen und auf einfache Weise einen Funktionsereignisempfänger hinzufügen, indem Sie mit der rechten Maustaste auf die Funktion klicken und Ereignisempfänger hinzufügen auswählen. Diese Vorgehensweise ist sehr einfach und produktiv, wenn Sie anstelle der Konfiguration den Code für Ihre Lösung bearbeiten. Das Problem ist, dass der hinzugefügte Ereignisempfänger standardmäßig von SPFeatureReceiver erbt. Wie Sie sicher alle wissen, muss der zum Registrieren eines benutzerdefinierten Anspruchsanbieters verwendete Ereignisempfänger von SPClaimProviderFeatureReceiver erben (https://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx). Darüber hinaus verhindert die integrierte SharePoint-Intelligenz in Visual Studio eine intuitive Vorgehensweise, um einfach einem SharePoint 2010-Projekt eine Klasse hinzuzufügen und dann einer Funktion zuzuordnen. Es gibt jedoch einen ziemlich einfachen und cleveren Trick.
Ich fand dies vor einer Weile heraus, als ich zunächst wie gewohnt begann, nämlich mit einem von mir erstellten benutzerdefinierten Anspruchsanbieter und einem entsprechenden Funktionsempfänger, um diesen zu installieren. Diese beiden Klassen waren Bestandteil desselben Projekts. Ich wollte, dass das neue Funktionspaket in Visual Studio 2010 verwendet werden kann, weshalb ich wie im Folgenden beschrieben vorgegangen bin.
1. Führen Sie den ersten Durchlauf für das benutzerdefinierte Anspruchsanbieterprojekt und den entsprechenden Ereignisempfänger für die Registrierung aus, und kompilieren Sie es. Sie sollten die kompilierte Assembly heranziehen und den starken Name für die Assembly sowie den Klassennamen für den Ereignisempfänger abrufen.
2. Fügen Sie der Lösung ein neues Projekt basierend auf der SharePoint 2010-Vorlage Leeres SharePoint-Projekt hinzu. Konfigurieren Sie das bereitzustellende Projekt als Farmlösung.
3. Klicken Sie mit der rechten Maustaste auf den Knoten Funktionen, und wählen Sie Funktion hinzufügen aus. Die Funktion sollte als Farm ausgelegt sein und automatisch aktiviert werden. Konfigurieren Sie andernfalls die Funktionseigenschaften entsprechend Ihren Anforderungen. Folgendes sollten Sie unbedingt beachten: Konfigurieren Sie die folgenden beiden Eigenschaften wie beschrieben für die Funktion (im Eigenschaftenfenster von Visual Studio):
a. Empfängerassembly: Geben Sie wie in Schritt 1 beschrieben den starken Namen für Ihre Assembly ein, wie z. B. MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701
b. Empfängerklasse: Geben Sie den Namen der Klasse ein, die Sie für Ihren benutzerdefinierten Anspruchsanbieter in Schritt 1 erstellt haben, wie z. B. MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver
4. Fügen Sie die kompilierte benutzerdefinierte Anspruchsanbieterassembly der Liste von Assemblys hinzu, die von der Paketlösung bereitgestellt werden. Doppelklicken Sie dazu auf den Knoten Package.package im Visual Studio-Paketprojekt. Klicken Sie auf die Registerkarte Erweitert. Klicken Sie auf die Schaltfläche Hinzufügen und dann auf das Menü Vorhandene Assembly hinzufügen. Suchen Sie nach dem entsprechenden Speicherort für die kompilierte benutzerdefinierte Anspruchsanbieterassembly, und lassen Sie Bereitstellungsziel: GlobalAssemblyCache ausgewählt (standardmäßig ausgewählt). Klicken Sie auf OK, um die Änderungen zu speichern. Anschließend können Sie das Paketeigenschaftenfenster schließen. Folgendes sollten Sie in diesem Zusammenhang beachten: Gewöhnlich erstelle ich nur einen Ordner in meinem Paketprojekt, in den ich meine kompilierten Assemblys aus anderen Projekten kopiere, die mit der Lösung verteilt werden sollen. Beim Konfigurieren der zusätzlichen Assemblys im Paket nehme ich einfach eine Auswahl im Ordner meines Paketprojekts vor. Für meine anderen Projekten verwende ich ein Postbuildskript, mit dem die kompilierte Assembly automatisch in diesen Assemblyordner meines Paketprojekts kopiert wird. Ich verwende dafür eine einzige Postbuildcodezeile, mit der die Assembly kopiert wird, unabhängig davon, ob es sich um einen Debug- oder Versionsbuild handelt. Auf diese Weise muss ich nicht daran denken, diesen Schritt jedes Mal selbst auszuführen. Diese Codezeile sieht wie folgt aus:
copy "$(TargetPath)" ..\..\..\MyPackagingProject\GacFiles /Y
Das Paket ist damit abgeschlossen. Sie müssen lediglich das Paketprojekt kompilieren und im Kontextmenü die Option Paket für das Projekt auswählen. Sie erhalten eine WSP-Datei, die Sie dann verteilen können und mit deren Hilfe der benutzerdefinierte Anspruchsanbieter automatisch installiert werden kann.
Es handelt sich hierbei um einen übersetzten Blogbeitrag. Sie finden den Originalartikel unter Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project.