Es posible que aquellos que hayan desarrollado soluciones para SharePoint 2010 con Visual Studio 2010 hayan observado una ligera peculiaridad en el empaquetado cuando se trata de proveedores de notificaciones personalizados.  En Visual Studio 2010, puede crear una nueva característica y agregarle fácilmente un receptor de eventos de característica. Para ello, solo debe hacer clic con el botón secundario en la característica y seleccionar el menú Agregar receptor de eventos.  Esto es interesante porque resulta muy fácil y productivo para poder comenzar a trabajar en el código para la solución en lugar de ocuparse de la configuración.  La desconexión se produce debido a que el receptor de eventos que se agrega de manera predeterminada hereda de SPFeatureReceiver.  Seguramente todos sepan que el receptor de eventos que se usa para registrar un proveedor de notificaciones personalizado debe heredar de SPClaimProviderFeatureReceiver (http://blogs.technet.com/b/speschka/archive/2010/03/13/writing-a-custom-claims-provider-for-sharepoint-2010-part-1.aspx).  Además, las tecnologías de supervisión automática, análisis y generación de informes (SMART) de SharePoint integradas en Visual Studio no son realmente intuitivas como para simplemente agregar una clase a un proyecto de SharePoint 2010 y, a continuación, asociarla con una característica.  Sin embargo, este problema se puede evitar de una forma bastante sencilla.

Hice este recorrido hace tiempo, cuando comencé desde mi punto de partida habitual. Había creado un proveedor de notificaciones personalizado y tenía el receptor de características correspondiente para instalarlo.  Estas dos clases formaban parte de un único proyecto.  Decidí que realmente quería lograr que la nueva característica de empaquetado de Visual Studio 2010 funcionara. A continuación, proporciono los pasos que debe seguir.

1. Complete el primer segmento del proyecto del proveedor de notificaciones personalizado y un receptor de eventos correspondiente para el registro. A continuación, compílelo. Revise el ensamblado compilado y obtenga el nombre seguro para el ensamblado, así como el nombre de la clase para el receptor de eventos.

2. Agregue un nuevo proyecto a la solución, basado en una plantilla "Proyecto de SharePoint vacío" de SharePoint 2010. Configure el proyecto para que se implemente como una solución de conjunto o granja de servidores.

3. Haga clic con el botón secundario en el nodo Características del proyecto y seleccione Agregar característica. La característica debe encontrarse en el ámbito de la granja de servidores y activarse automáticamente. Si esto no ocurre, configure las propiedades de la característica según lo que desee realizar. Debe tener en cuenta algo importante: las dos propiedades se deben configurar en la característica (en la ventana Propiedades de Visual Studio) de la siguiente manera:

a. Ensamblado del receptor: coloque el nombre seguro del ensamblado, que se obtiene en el paso 1; por ejemplo, MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701

b. Clase del receptor: coloque el nombre de la clase que escribió en el proveedor de notificaciones personalizado en el paso 1; por ejemplo, MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver

4. Agregue el ensamblado de proveedor de notificaciones personalizado compilado a la lista de ensamblados que la solución de empaquetado va a implementar. Para ello, haga doble clic en el nodo Package.package del proyecto de empaquetado de Visual Studio. Haga clic en la pestaña Avanzadas. Haga clic en el botón Agregar y, a continuación, en el menú Agregar ensamblado existente. Busque la ubicación correcta para el ensamblado de proveedor de notificaciones personalizado compilado y mantenga la selección de GlobalAssemblyCache como destino de la implementación (está seleccionado de manera predeterminada). Haga clic en el botón Aceptar para guardar los cambios y, a continuación, cierre la ventana Propiedades del paquete. Es importante tener en cuenta que suelo crear una sola carpeta en el proyecto de empaquetado, en la que copio los ensamblados compilados de otros proyectos que deseo que se distribuyan con la solución. Cuando configuro los ensamblados adicionales en el paquete, simplemente los selecciono de la carpeta del proyecto de empaquetado. En mis otros proyectos, tengo un script posterior a la generación que copia automáticamente el ensamblado compilado en la carpeta de ensamblados del proyecto de empaquetado. Se trata de una única línea de código sencilla posterior a la generación, que copia el ensamblado, tanto si es una generación /debug o /build, de modo que no es necesario que recuerde hacerlo yo mismo. Tiene el siguiente aspecto:

 

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

El paquete ya está terminado.  Solo debe compilar el proyecto de paquete y, a continuación, seleccionar el menú Paquete del menú contextual del proyecto.  Obtendrá un archivo WSP que, más adelante, puede distribuir y hacer que extienda automáticamente el proveedor de notificaciones personalizado.

Esta entrada de blog es una traducción. Puede consultar el artículo original en Packaging A SharePoint 2010 Custom Claims Provider in a Visual Studio 2010 SharePoint Project