Error: Una excepción BadImageFormatException puede producir cuando usa una restricción definidos de forma recursiva de un tipo genérico en una aplicación basada en .NET Framework 2.0

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 940164
Síntomas
En una aplicación basada en .NET Framework 2.0 en Microsoft, utilice una restricción de definidos de forma recursiva de un tipo genérico. Al hacerlo, puede producirse una excepción BadImageFormatException en tiempo de ejecución. Este problema se produce sólo en ciertos escenarios.
Causa
Este problema se produce debido a un problema en los componentes de Microsoft Visual Studio 2005 common language runtime (CLR 2.0).
Solución
Para evitar este problema, quite la restricción de clase el GetClass E estática pública <e> método.

Nota Las restricciones son límites colocados en parámetros de tipo genérico.

Para quitar la restricción de clase de la GetClass E estática pública <e> método, cambie la firma del método como sigue.

Código existente

public static E GetClass<E>() where E : class, new()

Código de reemplazo

public static E GetClass<E>() where E : new()
Estado
Microsoft ha confirmado que se trata de un error de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:".
Más información
Para obtener más información acerca de los componentes genéricos en CLR, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

Pasos para reproducir el problema

  1. En un equipo que tiene instalado Visual Studio 2005, cree el siguiente programa de C#.
    using System;public abstract class AbstractClass1<E> where E : AbstractClass1<E>, new(){ }public class Class1 : AbstractClass1<Class1>{ }public class Class2<E> where E : AbstractClass1<E>, new(){    public E GetClass1()    {        return Factory.GetClass<E>();    }}public class Factory{    public static E GetClass<E>() where E : class, new()    {        return new E();    }}public class Program{    static void Main()    {        Console.WriteLine("Hit enter to continue..");        Console.ReadLine();        Class2<Class1> c2 = new Class2<Class1>();        c2.GetClass1();        Console.WriteLine("Hi");    }}
  2. Compile el programa y, a continuación, ejecutar el programa. Se se produce la excepción BadImageFormatException en tiempo de ejecución cuando se llama al método c2.GetClass1 .

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 940164 - Última revisión: 07/30/2007 18:30:14 - Revisión: 1.0

Microsoft .NET Framework 2.0, Microsoft Visual Studio 2005 Standard Edition, Microsoft Visual Studio 2005 Professional Edition, Microsoft Visual Studio 2005 Express Edition

  • kbmt kbbug kbtshoot KB940164 KbMtes
Comentarios