Chyba: Výjimka BadImageFormatException může dojít při použití rekurzivně definována omezení obecného typu v aplikaci založené na rozhraní .NET Framework 2.0

Překlady článku Překlady článku
ID článku: 940164 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

V Microsoft aplikace založené na rozhraní .NET Framework 2.0 použít rekurzivně definována omezení obecného typu. Když toto provedete, může dojít BadImageFormatException výjimka za běhu. K tomuto problému dochází pouze v určitých scénářích.

Příčina

K tomuto problému dochází z důvodu problému v Microsoft Visual Studio 2005 komponenty společného jazykového modulu runtime (CLR 2.0).

Jak potíže obejít

Tento problém vyřešit, odeberte omezení třídy z Veřejné statické E GetClass <e> metodu.

Poznámka: Omezení jsou omezení umístit na parametry obecného typu.

Odebrat omezení třídy z Veřejné statické E GetClass <e> metodu, způsobem změnit podpis metody.

Existující kód

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

Náhradní kód

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

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Další informace

Další informace o generics CLR na webu Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/msdnmag/issues/06/00/NET/default.aspx

Postup reprodukce problému

  1. V počítači má Visual Studio 2005 vytvořte následující program 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. Zkompilujte program a potom spusťte program. Výjimka BadImageFormatException dochází při spuštění, kdy je volána metoda c2.GetClass1.

Vlastnosti

ID článku: 940164 - Poslední aktualizace: 30. července 2007 - Revize: 1.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
Klíčová slova: 
kbmt kbbug kbtshoot KB940164 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:940164

Dejte nám zpětnou vazbu

 

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