Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

407
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!