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

Seleccione idioma Seleccione idioma
Id. de artículo: 940164 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

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):
http://msdn.microsoft.com/msdnmag/issues/06/00/NET/default.aspx

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 .

Propiedades

Id. de artículo: 940164 - Última revisión: lunes, 30 de julio de 2007 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Palabras clave: 
kbmt kbbug kbtshoot KB940164 KbMtes
Traducción automática
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

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com