Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

409
Vistas
Reflexión: cree una instancia de una clase que herede de otra clase ubicada en un ensamblaje separado

Creé una aplicación de formulario web vacía que se ejecuta en .Net Framework 4.7.2 y creé un formulario web y una clase llamada MyClass :

 namespace WebApplication1 { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public string GetText() { return "Message of Web Form 1"; } } }

y:

 namespace WebApplication1 { public class MyClass { public string GetText() { return "Message from MyClass"; } } }

y lo publico usando la opción "Combinar todos los ensamblajes en un ensamblaje":

ingrese la descripción de la imagen aquí

Luego quiero obtener el tipo y luego crear una instancia de WebForm1 y MyClass .

Escribí este código en una aplicación de consola que se ejecuta bajo .Net 5 :

 Assembly asm = Assembly.LoadFrom(@"C:\Pub\bin\WebApplication1.dll"); Type tMyClass = asm.GetType("WebApplication1.MyClass"); Type t = asm.GetType("WebApplication1.WebForm1"); <----Error

Después de ejecutar el código, tMyClass tiene el tipo correcto:

ingrese la descripción de la imagen aquí ]

pero cuando trato de obtener el tipo de WebForm1 , aparece un error:

ingrese la descripción de la imagen aquí

System.TypeLoadException: 'No se pudo cargar el tipo 'System.Web.UI.Page' del ensamblado 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.'

¿Cómo puedo obtener el tipo de WebForm1 y crear una instancia de él?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Carga un ensamblado integrado en .NET Framework a través de la reflexión en .NET Core , pero algunas de las clases en el espacio de nombres System.Web no son compatibles con .NET Core . Carga partes del código de usuario. Y otras partes pueden no funcionar. En su caso, la clase solicitada del código compilado para .NET Framework no forma parte de .NET Core . System.Web es para Asp.Net y en .NET Core existe el espacio de nombres System.Web y técnicamente podría llamarse, pero no funcionará como usted desea.

over 4 years ago · Santiago Trujillo Denunciar

0

El motivo del error es que System.Web.UI.Page no existe en .NET 5. Por lo tanto, no puede cargar el ensamblado con el fin de ejecutar el código dentro de su aplicación de consola.

Sin embargo, aún puede cargar los metadatos de su clase WebApplication1.WebForm1 en un contexto de solo reflexión con el fin de examinar el tipo. La forma en que lo hace en .NET 5 es diferente a la de .NET Framework mediante el uso de un MetadataLoadContext de este paquete NuGet .

 var dllPath = @"C:\Pub\bin\WebApplication1.dll"; var paths = new List<string>(); paths.AddRange(Directory.GetFiles(Path.GetDirectoryName(dllPath), "*.dll")); paths.AddRange(Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll")); using var context = new MetadataLoadContext(new PathAssemblyResolver(paths)); var asm = context.LoadFromAssemblyPath(dllPath); var yourType = asm.GetType("WebApplication1.WebForm1");

También tenga en cuenta que si está intentando acceder a los métodos que están definidos en un ensamblaje no cargado, seguirá recibiendo un error:

 yourType.GetMethods(); // Error yourType.GetMethods(BindingFlags.DeclaredOnly); // OK
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda