Erro: A excepção BadImageFormatException poderá ocorrer quando utiliza uma restrição definida de forma recursiva de um tipo genérico numa aplicação baseada no .NET Framework 2.0

Traduções de Artigos Traduções de Artigos
Artigo: 940164 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Uma aplicação baseada no .NET Framework 2.0 no Microsoft, utiliza uma restrição definida de forma recursiva de um tipo genérico. Quando o fizer, poderá ocorrer uma excepção BadImageFormatException em tempo de execução. Este problema ocorre apenas em determinados cenários.

Causa

Este problema ocorre devido a um problema nos componentes do Microsoft Visual Studio 2005 common language runtime (CLR 2.0).

Como contornar

Para contornar este problema, remova a restrição de classe do GetClass E estático <e> pública método.

Nota Constrangimentos são limites que são colocados em parâmetros de tipo genérico.

Para remover a restrição de classe a GetClass E estático <e> pública método, alterar a assinatura de método da seguinte forma.

Código existente

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

Código de substituição

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

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos do Microsoft listados na secção "Aplica-se a".

Mais Informação

Para obter mais informações sobre generics no CLR, visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/msdnmag/issues/06/00/NET/default.aspx

Passos para reproduzir o problema

  1. No computador com o Visual Studio 2005 instalado, crie o seguinte programa 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. Compilar o programa e, em seguida, execute o programa. A excepção BadImageFormatException ocorre em tempo de execução quando o método c2.GetClass1 é chamado.

Propriedades

Artigo: 940164 - Última revisão: 30 de julho de 2007 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express Edition
Palavras-chave: 
kbmt kbbug kbtshoot KB940164 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 940164

Submeter comentários

 

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