Erro: Uma exceção BadImageFormatException pode ocorrer quando você usa uma restrição recursivamente definido de um tipo genérico em um aplicativo baseado no .NET Framework 2.0

Traduções deste artigo Traduções deste artigo
ID do artigo: 940164 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Em um aplicativo baseado no .NET Framework 2.0 no Microsoft, você usa uma restrição recursivamente definido de um tipo genérico. Quando você fizer isso, uma exceção BadImageFormatException pode ocorrer em tempo de execução. Esse problema ocorre apenas em determinados cenários.

Causa

Esse 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 estático E <e> pública método.

Observação Restrições são limites que são colocados em parâmetros de tipo genérico.

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

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()

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

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

Etapas para reproduzir o problema

  1. Em um computador que tenha instalado o Visual Studio 2005, crie o seguinte programa translation from VPE for Csharp.
    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 exceção BadImageFormatException ocorre em tempo de execução quando o método c2.GetClass1 é chamado.

Propriedades

ID do artigo: 940164 - Última revisão: segunda-feira, 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 Edition
  • 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes 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