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

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

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.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 940164 - Última Revisão: 07/30/2007 18:30:14 - Revisão: 1.0

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

  • kbmt kbbug kbtshoot KB940164 KbMtpt
Comentários