BUG: .NET Framework 2.0 기반 응용 프로그램에서 제네릭 형식의 재귀적으로 정의된 제약 조건을 사용할 때 A BadImageFormatException 예외가 발생할 수 있다

기술 자료 번역 기술 자료 번역
기술 자료: 940164 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

현상

.NET Framework 2.0 기반 응용 프로그램을 Microsoft 에서는 제네릭 형식의 재귀적으로 정의된 제한을 사용합니다. 이렇게 하면 런타임에 BadImageFormatException 예외가 발생할 수 있습니다. 이 문제는 특정 시나리오에서만 발생합니다.

원인

Visual Studio 2005 공용 언어 런타임 (CLR 2.0) 구성 에서 문제로 인해 이 문제가 발생합니다.

해결 과정

이 문제를 해결하려면 클래스 제약 에서 제거할 공용 정적 E GetClass <e> 메서드.

참고 제약 조건은 제네릭 형식 매개 변수를 넣을 제한이 있습니다.

에서 클래스 제약 조건을 제거하려면 공용 정적 E GetClass <e> 메서드 메서드 시그니처는 다음과 같이 변경합니다.

기존 코드

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

대체 코드

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

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열된 제품에서 이 문제를 확인했습니다.

추가 정보

CLR의 제네릭에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 방문하십시오.
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 - 마지막 검토: 2007년 7월 30일 월요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework 2.0
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Express Edition
키워드:?
kbmt kbbug kbtshoot KB940164 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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