2010-04-19 14 views
10

Estoy escribiendo una pequeña aplicación de consola en C# que hace referencia a un ensamblaje personalizado que implementa el proveedor personalizado de perfiles .net. He agregado las siguientes secciones a mi archivo app.config que hace referencia a la clase y el ensamblaje personalizados.No se pudo cargar el tipo en el proveedor de perfiles personalizados

<system.web> 
<profile defaultProvider="MyCompanyProfileProvider" inherits="MyCompany.Web.User.GenericProfile" automaticSaveEnabled="false"> 
    <providers> 
     <clear/> 
     <add name="MyCompanyProfileProvider" connectionStringName="defaultDatabase" applicationName="/myApplication" type="MyCompany.Web.ProfileProvider, MyCompany.Web"/> 
    </providers> 
    <properties> 
     <add name="JobRoleId" type="System.Int32"/> 
     <add name="LastCompetencyId" type="System.Int32" defaultValue="0"/> 
     <add name="MixSettings" type="System.Xml.XmlDocument"/> 
    </properties> 
</profile></system.web> 

Sin embargo cuando funciono con la aplicación en modo de depuración me sale el siguiente error como si se está mirando en la asamblea System.Web en lugar de uno especificado en el archivo app.config.

No se pudo cargar el tipo 'MyCompany.Web.User.GenericProfile' del ensamblado 'System.Web, versión = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a'.

Tengo una aplicación web local que también usa el ensamblador y el proveedor de perfiles personalizados y que funciona sin ningún problema. He comprobado que el ensamblaje al que se hace referencia se está copiando en el directorio de salida.

¿Alguna idea?

Respuesta

19

¡Finalmente encontré la respuesta a esto y fue tan simple! (Él dice después de horas de búsqueda y depuración).

Solo tenía que indicar explícitamente en qué ensamblaje residía mi proveedor personalizado. Pensé que solo tenía que hacer esto al especificar el tipo al agregar el proveedor.

Sin embargo, debe definir al definir su perfil en el atributo heredado. De este modo:

Antes:

<profile defaultProvider="MyCompanyProfileProvider" 
     inherits="MyCompany.Web.User.GenericProfile" 
     automaticSaveEnabled="false"> 

Después:

<profile defaultProvider="MyCompanyProfileProvider" 
     inherits="MyCompany.Web.User.GenericProfile, MyCompany.Web" 
     automaticSaveEnabled="false"> 

Espero que esto ayude a alguien más en el futuro con el mismo problema.

+0

También se explica aquí: http://forums.asp.net/post/3709675.aspx –

+1

+1 - Esto me ayudó a hacer funcionar mis pruebas NUnit. Everthing funcionaba bien mientras ejecutaba mi aplicación MVC4, pero las pruebas de la unidad fallaban. Asegúrese de que este cambio esté incluido en la aplicación.archivo de configuración al que hacen referencia los módulos de prueba de la unidad. – Winger

0

Intenta eliminar el espacio adicional detrás de la coma donde especifiques tu clase y ensamblaje, pero no creo que eso lo solucione.

Su aplicación está buscando su clase personalizada en el ensamblado System.Web, lo cual es muy extraño.

Usaría fuslogvw para obtener más detalles sobre la falla.

+0

Intenté ambas sugerencias y seguimos sin avanzar. Fuslogvw no me dio información decente para rastrear el problema aún más. – Cragly

0

Su solución guardó mi lo siento a * se después de DESPERTAR DÍAS de mi precioso tiempo persiguiendo este problema. Como de costumbre, tengo WASTED DAYS luchando contra los productos de Microsoft en lugar de los problemas de TI que realmente necesito resolver. Mis líneas App.config ahora se ven así y parece que funciona bien:

<profile defaultProvider="DefaultProfileProvider" inherits="SmartTariffs_V13.ProfileCommon, SmartTariffs_V13"> 
    <providers> 
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
</profile> 

Dónde SmartTariffs_V13 es el nombre del proyecto y SmartTariffs_V13.ProfileCommon es el nombre del archivo .cs dentro de ese proyecto. Encontré que esto funciona sin agregar la etiqueta "automaticSaveEnabled", pero bueno ...

Cuestiones relacionadas