MembershipProvider y .Net Framework 4.0
Publicado por Jhonny López Ramírez en 24 enero 2011
Caso
Decides implementar un proveedor de membresía (o pertenencia) propio para resolver la autenticación y autorización de tus sitios web por medio de información almacenada en una base de datos de terceros (Oracle, MySql, etc.) o de servicios que están publicados a través de WCF. Adicionalmente, tendrás varios sitios web que usarán esta autenticación así que decides crear un proyecto de tipo biblioteca de clases (Class Library) con Visual Studio 2010, es decir, .Net Framework 4.0.
Como siempre has obrado en estos casos, sabes que debes escribir un proveedor de membresía personalizado que herede de la clase MembershipProvider; antes de eso debes referenciar la dll System.Web que contiene el espacio de nombres System.Web.Security. Escribes un código similar a este:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Security; using System.Web.Security; using System.Configuration.Provider; using System.Configuration; using System.Web.Configuration; namespace MyNamespace { public class MyMembershipProvider : MembershipProvider
Te das cuenta que ni el intellisense ni una compilación logran reconocer a MembershipProvider como clase dentro del espacio de nombres System.Web.Security. Luego, en un proyecto web te das cuenta que MembershipProvider sigue estando en dicho espacio de nombres, lo cual aumenta la confusión.
Causa
En .Net Framework 4.0, la clase MembershipProvider, clase abstracta de la que deben heredar todos los proveedores de membresía ASP.NET personalizados, ha sido movida al ensamblado System.Web.ApplicationServices. Por defecto, los proyectos web en Visual Studio referencian dicho ensamblado, las bibliotecas de clases (Class Library) no.
Solución
Se debe referenciar en el proyecto de tipo biblioteca de clases (Class Library) el ensamblado System.Web.ApplicationServices. Después de esto se podrá hacer uso de la clase MembershipProvider del espacio de nombres System.Web.Security.

Darling escribió
Buen aporte, como siempre tan efectivo
Matias Clemente escribió
Excelente comentario, me volvi loco, y hasta habia desistido. Gracias
Jhonny López Ramírez escribió
Con mucho gusto.
The Unix Dynasty escribió
¿Lo ves? También os defendía a vosotros
A ver si leemos antes de acusar
Jhonny López escribió
Otra vez con eso?
ximovai escribió
muchas gracias! me has salvado la vida hoy!
Felipe Rodríguez (@mjcf1) escribió
Gracias
mlizbeth escribió
o.O yo no tuve ese problema :S Con usar using System.Web.Security me funcionó