BUG: BadImageFormatException исключение может возникать при использовании ограничения рекурсивное определение универсального типа в приложениях .NET Framework 2.0

Переводы статьи Переводы статьи
Код статьи: 940164 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

В Microsoft приложения на основе .NET Framework 2.0 можно использовать ограничения рекурсивное определение универсального типа. При этом,BadImageFormatExceptionво время выполнения может возникнуть исключение. Данная проблема возникает только в определенных ситуациях.

Причина

Данная проблема возникает из-за проблемы в компоненты среды выполнения (CLR 2.0) общего языка Microsoft Visual Studio 2005.

Временное решение

Чтобы обойти эту проблему, удалите ограничение класса изоткрытые статические GetClass E<e></e>метод.

Примечание.Ограничения — это ограничения, которые помещаются на параметры универсального типа.

Чтобы удалить ограничение класса изоткрытые статические GetClass E<e></e>метод, следующим образом изменить подпись метода.

Существующий код

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

Замена кода

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

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе "Информация в данной статье применима к:"..

Дополнительная информация

Для получения дополнительных сведений об универсальных шаблонов в среде CLR посетите следующий веб-узел Microsoft Developer Network (MSDN):
http://MSDN.Microsoft.com/msdnmag/issues/06/00/NET/Default.aspx

Действия по воспроизведению проблемы

  1. На компьютере с установленной Visual Studio 2005 создайте следующие программы на 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. Скомпилируйте программу, а затем запустите программу. надписьюBadImageFormatExceptionисключение возникает при запуске время, когдаC2.GetClass1вызов метода.

Свойства

Код статьи: 940164 - Последний отзыв: 28 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
Ключевые слова: 
kbbug kbtshoot kbmt KB940164 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:940164

Отправить отзыв

 

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