Pour ceux ou celles d’entre vous qui ont développé des solutions pour SharePoint 2010 avec Visual Studio 2010, vous avez peut-être noté une particularité lors de la mise en package dès lors qu’elle concerne des fournisseurs de revendications personnalisées.  Dans Visual Studio 2010, vous pouvez créer une nouvelle fonctionnalité et vous pouvez aussi facilement y ajouter un récepteur d’événements de fonctionnalité simplement en cliquant avec le bouton droit sur la fonctionnalité et en sélectionnant le menu Ajouter un récepteur d’événements.  C’est très bien car il est très facile et productif de travailler sur le codage de votre solution plutôt que de le faire sur la configuration.  Le problème survient car le récepteur d’événements qu’il ajoute hérite de SPFeatureReceiver.  Comme vous le savez certainement, le récepteur d’événements utilisé pour inscrire un fournisseur de revendications personnalisées doit hériter de SPClaimProviderFeatureReceiver (http://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx).  De plus, les composants SmartPart SharePoint intégrés de Visual Studio ne se prêtent pas eux-mêmes à une façon intuitive d’ajouter une classe à un projet SharePoint 2010 puis à l’associer à une fonctionnalité.  Il existe cependant un moyen assez facile et astucieux de le faire.

J’en suis venu à cette méthode il y a peu, alors que je commençais par mon point de départ habituel : j’avais un fournisseur de revendications personnalisées que j’avais écrit et un récepteur pour la fonctionnalité correspondante à installer.  Ces deux classes faisaient partie d’un même projet.  J’ai décidé que je voulais vraiment que la mise en package de la nouvelle fonctionnalité de Visual Studio 2010 travaille pour moi : voici comment j’ai procédé.

1. Effectuez votre première étape au niveau de votre projet de fournisseur de revendications personnalisées et du récepteur d’événements correspondant pour l’inscription, puis compilez-le. Vous voulez regarder l’assembly compilé et obtenir le nom fort pour l’assembly ainsi que le nom de la classe pour le récepteur d’événements.

2. Ajouter un nouveau projet à votre solution et basez-le sur un modèle « Projet SharePoint vide » de SharePoint 2010. Configurez le projet pour un déploiement en tant que solution de batterie de serveurs.

3. Cliquez avec le bouton droit sur le nœud Fonctionnalités du projet et sélectionnez Ajouter une fonctionnalité. La portée de votre fonctionnalité doit être définie à « Batterie de serveurs » et doit s’activer automatiquement. Sinon, configurez les propriétés de la fonctionnalité de façon appropriée pour ce que vous voulez faire. Voici le point important : configurez ces deux propriétés de la fonctionnalité (dans la fenêtre Propriétés de Visual Studio) comme ceci :

a. Receiver Assembly : spécifiez le nom fort de votre assembly décrit à l’étape 1, par exemple MonFournisseurDeRevendications.TestRevendication, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701

b. Receiver Class : spécifiez le nom de la classe que vous avez écrite pour votre fournisseur de revendications personnalisées à l’étape 1, par exemple MonFournisseurDeRevendications.TestRevendication.MonRécepteurDeFonctionnalitéDeRevendications

4. Ajoutez l’assembly du fournisseur de revendications personnalisées compilé à la liste des assemblys que votre solution de mise en package va déployer. Pour cela, double-cliquez sur le nœud Package.package du projet de mise en package Visual Studio. Cliquez sur l’onglet Avancé. Cliquez sur le bouton Ajouter puis sur le menu Ajouter un assembly existant. Recherchez l’emplacement correct pour votre assembly de fournisseur de revendications personnalisées compilé et laissez Cible de déploiement : GlobalAssemblyCache sélectionné (il l’est par défaut). Cliquez sur le bouton OK pour enregistrer vos modifications ; vous pouvez ensuite fermer la fenêtre des propriétés du package. Notez ici une chose : je crée d’habitude simplement un dossier dans mon projet de mise en package là où je copie mes assemblys compilés à partir d’autres projets que je veux distribuer avec la solution. Lorsque je configure les assemblys supplémentaires dans le package, je fais simplement une sélection depuis mon dossier dans mon projet de mise en package. Dans mes autres projets, j’ai un script post-création qui copie automatiquement l’assembly compilé dans ce dossier d’assemblys de mon projet de mise en package. C’est une simple ligne de code de post-création qui copie l’assembly, qu’il s’agisse d’une version de débogage ou d’une version commercialisée ; ainsi, je ne dois pas me rappeler de le faire moi-même à chaque fois. Elle est similaire à ceci :

 

copy "$(CheminCible)" ..\..\..\MonProjetMiseEnPackage\FichiersGac /Y

Votre package est maintenant terminé.  Vous devez seulement compiler le projet de package puis sélectionner le menu Package à partir du menu contextuel pour le projet.  Vous obtenez au final un fichier WSP que vous pouvez distribuer et qui diffuse automatiquement votre fournisseur de revendications personnalisées.

Ce billet de blog a été traduit de l’anglais. L’article d’origine est disponible à la page Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project