2010-08-11 41 views
5

He buscado durante dos semanas todas las noches, leyendo exhaustivamente los temas del foro y probando todas las soluciones sugeridas sin importar lo extravagantes. Al igual que en el caso de los muchos temas del foro sobre este mismo problema, el sitio funciona bien en mi máquina de desarrollo. Se implementa sin errores. Funciona desde el servidor de producción y lee datos de la base de datos, pero cuando intenta acceder a un perfil, se bloquea con este error.Cualquier referencia a profilecommon provoca un error El valor no puede ser nulo. Nombre del parámetro: tipo

Varias publicaciones dicen que marque o desmarque una opción llamada "eliminar archivo app_code.compiled" pero aparentemente esta fue una opción de Visual Studio 2005. No se encuentra en ningún lugar de Visual Studio 2010. Varias publicaciones indican que App_Code.dll está presente en mi directorio bin. Está presente. He eliminado manualmente el archivo app_code.compile para ver si eso hizo alguna diferencia. Cambié el marco de destino de 4.0 a 2.0 y 3.5. Eliminé completamente el sitio en IIS, creé una carpeta diferente con un nombre diferente y volví a desplegar el sitio con cada combinación de "permitir que este sitio precompilado sea actualizable" y "Usar nombres fijos y conjuntos de una sola página". He incluido referencias a System.Web.Profile y System.Web y System.Web.Profile.ProfileCommon. Creé un nuevo sitio web nuevo orientado a .NET Framework v4.0 y copié ese archivo web.config a mi aplicación y recreé las entradas de mi perfil para asegurarme de que no subí nada en el archivo de configuración en el camino. He quemado velas y he usado hechizos vudú. He rezado Literalmente he intentado todas las sugerencias imaginables en cada hilo del foro relacionado con este error en las primeras cinco páginas más o menos de devoluciones tanto en google como en bing. He pasado 14 días sin hacer casi nada pero tratando de hacer que este sitio web aparezca sin este error.

Una publicación mencionada para garantizar que haya una referencia a app_code.dll en el directorio bin. No sé cómo hacer eso, ya que se creó dinámicamente.

¿Alguien tiene alguna idea nueva sobre esto?

+2

Sería bueno tener el error real y un código de ejemplo o de seguimiento de la pila parcial. – cofiem

+0

Aquí está mi idea: pedirle a la comunidad votaciones ascendentes, para que pueda gastarlas como recompensa. –

+0

¿Tiene información de excepción más detallada, incluido el seguimiento de la pila? –

Respuesta

4

Vale, He estado leyendo y experimentando mucho sobre este tema, y ​​creo que reuní y recopilé información suficiente para ayudar a aquellos que podrían tropezar con este hilo al buscar este error. Lo que haré es simplemente ofrecer una explicación coloquial seguida de varios enlaces a información muy relevante.

Existen dos metodologías distintas de diseño web compatibles con Visual Studio; aplicaciones web y sitios web. Esto es cierto de 2005, 2008 y 2010. Esta división de los principios de diseño provino, aparentemente, del hecho de que Visual Studio 2003 solo admitía el modelo de aplicación web y este modelo se modificó con el lanzamiento de Visual Studio 2005, luego con el fin de hacer que los principios de diseño sean consistentes con las versiones anteriores, la metodología de la Aplicación Web se agregó a Visual Studio 2005 creando una bifurcación muy confusa en el camino para los desarrolladores de, al parecer, incluso niveles de habilidad respetables.

No entraré en detalles sobre las diferencias entre los dos modelos. Hay muchos detalles en los enlaces al final de esta publicación. Pero basta con decir que los perfiles NO son compatibles con la funcionalidad de la aplicación web.

Además, para complicar aún más las cosas, y esto es lo que me ha estado molestando, los perfiles no funcionarán con el modelo del sitio web si el sitio se publica mediante la opción de menú Build -> Publicar sitio web a menos que tal vez) se precompila manualmente primero, luego las dlls precompiladas se copian a través de "copiar sitio" o FTP o lo que sea que use. La precompilación es aparentemente realizada a través de la línea de comando. Tengo un enlace con instrucciones sobre cómo hacerlo a continuación. Pero, nuevamente, no lo he probado yo mismo, así que no sé si incluso ayuda. El motivo por el cual los perfiles no funcionan con el método de despliegue Build -> Publish Web Site es porque la clase ProfileCommon está construida dinámicamente con las propiedades de perfil que define en la configuración web cuando IIS compila dinámicamente su página por primera vez. se accede. Si utiliza la opción "compilar -> publicar sitio web" compila sus archivos DLL muy bien, pero no crea esta clase para usted.

Honestamente, no estoy seguro de por qué la opción Construir -> Publicar sitio web está incluida en el modelo del sitio web en primer lugar. De todo lo que he leído, el objetivo del modelo Sitio web vs Aplicación web es hacer que la experiencia ASP.net se asemeje más a una experiencia de desarrollo web tradicional, donde sus archivos pueden editarse en su máquina y enviarse por FTP al servidor o pueden hacerlo simplemente editado en el servidor. Sí, deben compilarse antes de que se acceda, pero esa compilación, por diseño, ocurre dinámicamente y, aparentemente, si primero compila el sitio y luego lo sube, lo compila sin crear dinámicamente la clase ProfileCommon y, por lo tanto, quitarle uno de las grandes características del enfoque asp.net para el diseño de sitios web.

Hay una serie de publicaciones donde las personas expresan su preocupación por la seguridad de su código, porque usar el modelo del sitio web y copiar sus archivos al servidor para compilación dinámica significa que los archivos con el código fuente se sientan en el servidor en un estado precompilado. Sin embargo, simplemente no veo la diferencia entre este y cualquier otro lenguaje de scripting web más tradicional como Perl, PHP o incluso ASP clásico. En esos idiomas, el código se considera vulnerable. Cualquier código es vulnerable en un servidor mal configurado. Además, incluso si su código está compilado, un pirata informático con la habilidad para eludir la seguridad de un servidor IIS bien configurado y obtener sus archivos de origen podría obtener sus archivos compilados y luego ejecutarlos a través de ILDASM.Entonces, a menos que estén profesionalmente ofuscados, ¿cuál es la diferencia?

Así que, por lo que descubrí, si desea usar perfiles en su sitio web asp.net, cree su sitio como Proyecto de sitio web frente a Proyecto de aplicación web y cópielo en su servidor en lugar de Publicarlo a través del menú de compilación. Es posible que pueda precompilarlo y luego publicarlo (no estoy seguro de eso) pero sé que simplemente copiarlo y dejarlo compilar dinámicamente funciona.

Si me falta algo y hay otra manera, me gustaría leer sobre ello. Mientras tanto, aquí hay algunos enlaces increíblemente útiles. Muchas gracias a 5arx para el establecimiento de mí en este camino:

http://www.codersbarn.com/post/2008/06/ASPNET-Web-Site-versus-Web-Application-Project.aspx

http://msdn.microsoft.com/en-us/library/dd547590.aspx

http://msdn.microsoft.com/en-us/library/ms227972.aspx

+0

Me alegro de ser de alguna utilidad, ¿qué hay de otro vórtice ...? ;-) – 5arx

1

Supongo que ha mirado la documentación - here y here y here.

Esto suena como algunos errores que he encontrado tratando de acceder/establecer propiedades en un usuario anónimo. Hay bastantes cosas que no se pueden hacer con anon. usuarios.

¿Hay otros errores relacionados con Perfiles/Membresía? Podría ser un problema con las tablas db o Application Id/User Id. Context.Request.AnonymousID no refleja necesariamente nada en el db, por lo que he encontrado problemas de depuración del perfil.

Si realmente está atascado, puede intentar obtener el source for the .Net Framework y depurarlo.

+0

Seguimiento de la pila: [ArgumentNullException: El valor no puede ser nulo. Nombre Parámetro: Tipo] System.Activator.CreateInstance (Tipo Tipo, Boole no pública) 9643414 System.Web.Profile.ProfileBase.CreateMyInstance (String nombre de usuario, Boole isAuthenticated) 79 System.Web.Profile.ProfileBase.Create (nombre de usuario String, Boolean isAuthenticated) 247 System.Web.HttpContext.get_Profile() 107 _perfect.get_Profile() 20 _perfect.Page_Load (remitente del objeto, EventArgs e) 249 System.Web.Util.CalliHelper .EventArgFunctionCaller (IntPtr fp, Object o, Object t, EventArgs e) +14 – Camenwolf

3

¿Estás diciendo que no puedes acceder al perfil en el código? Si es así, ¿podría publicar algunos códigos/pseudocódigo por favor? Creo que este es un problema que encontré la semana pasada (y corregido) ... - 5arx 11 minutos atrás

Tuve un problema similar la semana pasada: convertir un proyecto de sitio web ASP.Net en uno de aplicación web. En el primero, el perfil se define declarativamente en web.config. Sin embargo, los proyectos de aplicaciones web tienen problemas para acceder a la DLL app_code generada dinámicamente (ya que no está desarrollada por .Net hasta el tiempo de ejecución).La solución consiste en acceder a las propiedades del perfil de este modo:

 
ComplexProfileProperty _cpp = (ComplexProfileProperty)HttpContext.Current.Profile.GetPropertyValue("valuename"); 

HTH,

disculpas si he malinterpretado totalmente su pregunta - difícil estar seguro, sin ejemplos de código :-)

+0

Parece que podría estar en el camino correcto aquí 5arx. Aprecio tener algo nuevo para probar. Ya sabes, no debo ser completamente claro sobre la diferencia entre un sitio web y una aplicación web con respecto al entorno .net. Sé que en mi sitio el app_code.dll no se compila hasta que el sitio se publica en el servidor. Simplemente puedo copiar el sitio a la ubicación del servidor y funciona (al igual que en mi máquina de desarrollo) y hay una app_code.dll sospechosamente ausente. Cuando publico, autogenera el app_code.dll y el sitio se cuelga con este error. Voy a publicar el código cuando llegue a casa esta noche – Camenwolf

+0

Nunca me di cuenta de las diferencias entre el sitio y los modelos de aplicaciones en ASP.net. Aquí hay una artística con muchos enlaces que deberían ser de ayuda para cualquiera que se encuentre con esto. http://www.codersbarn.com/post/2008/06/01/ASPNET-Web-Site-versus-Web-Application-Project.aspx. He retrocedido y he creado una aplicación y un sitio vacíos en VS para verificar que la mina es realmente un "sitio". Puedo copiar el sitio al servidor y funciona. Si "publico" no lo hago. Estoy empezando a pensar que esto se espera, y que la "copia" podría preferirse para los sitios. Voy a publicar una respuesta después de un poco más de investigación. – Camenwolf

+1

Echa un vistazo a estos también: http://vishaljoshi.blogspot.com/2009/08/web-application-project-vs-web-site.html y http://stackoverflow.com/questions/590501/difference-between-web-site-and-project-in-visual-studio/2736096#2736096. Claramente, si está haciendo un desarrollo significativo y necesita poder probar y gestionar espacios de nombres, el proyecto de aplicación web es el único camino a seguir. – 5arx

Cuestiones relacionadas