c# - framework - Herencia de la página de resolución BuildManager
directivas en c# (2)
Posibles causas:
Si se refiere a cualquier código detrás del módulo en las páginas .aspx o en la página Global.asax y la aplicación web no se ha creado, entonces obtendrá este error. Simplemente cree la aplicación de nuevo y asegúrese de que el tipo Namespace.PageClass esté disponible en uno de los ensamblados de la aplicación web.
Use la directiva @Assembly para vincular el ensamblado a la página aspx en tiempo de compilación.
@ Assembly Name = "assemblyname" Src = "pathname" hace que todas las clases e interfaces del ensamblado estén disponibles para su uso.
2. Otra razón para dicho error podría ser una versión incorrecta de ASP.NET configurada en IIS. Para seleccionar la versión correcta de ASP.NET en IIS
Vaya al menú de Inicio, haga clic en Ejecutar (alternativamente use Win Key + R)
Escriba INetMgr y presione enter para abrir la aplicación de Internet Information Services
Expanda el nodo del árbol mostrando el nombre de la computadora local y navegue a Sitios web -> Sitio web predeterminado
Haga clic con el botón derecho en el nodo Sitio web predeterminado y seleccione la opción del menú emergente Propiedades
5. Navegue a la pestaña ASP.NET en la página de propiedades y configure la versión correcta / última.
He escrito un VirtualPathProvider para cambiar cómo se cargan las páginas aspx en mi aplicación ASP.Net. Como parte de este proceso, he eliminado los archivos de Code-Behind y simplemente estoy seguro de que mi página hereda de una clase de página en particular. p.ej:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass" %>
Si hago esto, obtengo la siguiente excepción:
HttpParseException no pudo cargar el tipo ''Namespace.PageClass''
También he intentado lo siguiente:
<%@ Page Language="C#" AutoEventWireup="true" Inherits="Namespace.PageClass, AssemblyName" %>
Esto produce el siguiente error:
HttpParseException No pudo cargar el ensamblado ''AssemblyName''. Asegúrese de que esté compilado antes de acceder a la página.
Cuando la aplicación comienza, cargo el ensamblaje requerido en el dominio actual de la aplicación:
AppDomain.Current.Load(...)
Por el momento, asumo que el problema radica en la capacidad de BuildManager de resolver el espacio de nombres / referencia de ensamblado ... pero si es honesto ... eso es una suposición :-)
¿Alguien puede arrojar algo de luz sobre esto?
Su página debe usar la ubicación de clase especificada completa, es decir Inherits="MyNamespace.MyClass, MyAssembly"
.
Luego, cargar el ensamblado en el dominio de la aplicación no ayudará a AppDomain a resolverlo. No recorre los ensamblajes cargados dinámicamente. Por lo tanto, debe suscribirse para el evento AppDomain.ResolveAssembly.
private Assembly myDynamicAssembly = null;
protected void Application_Start( object sender, EventArgs e )
{
myDynamicAssembly = Assembly.LoadFrom( Server.MapPath( "MyLocation/MyAssembly.dll" ) );
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler( CurrentDomain_AssemblyResolve );
}
Assembly CurrentDomain_AssemblyResolve( object sender, ResolveEventArgs args )
{
if ( args.Name == "MyAssembly" )
{
return myDynamicAssembly;
}
return null;
}
Y tu estas listo. Ahora el tiempo de ejecución sabe cómo resolver clases desde este ensamblaje cargado dinámicamente.