Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

408
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda