TypeInitializationException 클래스

정의

클래스 이니셜라이저에 의해 throw되는 예외 주위에서 래퍼로 throw되는 예외입니다.The exception that is thrown as a wrapper around the exception thrown by the class initializer. 이 클래스는 상속될 수 없습니다.This class cannot be inherited.

public ref class TypeInitializationException sealed : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class TypeInitializationException : SystemException
type TypeInitializationException = class
    inherit SystemException
Public NotInheritable Class TypeInitializationException
Inherits SystemException
상속
TypeInitializationException
특성

설명

클래스 이니셜라이저가 형식을 초기화하지 못하면 TypeInitializationException이 만들어지고 해당 형식의 클래스 이니셜라이저가 throw한 예외에 대한 참조가 전달됩니다.When a class initializer fails to initialize a type, a TypeInitializationException is created and passed a reference to the exception thrown by the type's class initializer. 합니다 InnerException 속성의 TypeInitializationException 에 내부 예외가 저장 합니다.The InnerException property of TypeInitializationException holds the underlying exception.

일반적으로 TypeInitializationException 치명적인 상태를 반영 하는 예외 (런타임에서 형식을 인스턴스화할 수 없는 경우.) 하지 않도록 하는 애플리케이션을 계속할 수 없습니다.Typically, the TypeInitializationException exception reflects a catastrophic condition (the runtime is unable to instantiate a type) that prevents an application from continuing. 가장 일반적으로 TypeInitializationException 애플리케이션의 실행 환경에서 일부 변경에 대 한 응답에서 throw 됩니다.Most commonly, the TypeInitializationException is thrown in response to some change in the executing environment of the application. 결과적으로 이외의 수 있는 코드를 디버깅 문제 해결에 대 한 예외 해야 처리를 try / catch 블록입니다.Consequently, other than possibly for troubleshooting debug code, the exception should not be handled in a try/catch block. 대신 예외의 원인은 조사 및 제거 해야 합니다.Instead, the cause of the exception should be investigated and eliminated.

TypeInitializationException 값 0x80131534 HRESULT COR_E_TYPEINITIALIZATION를 사용 합니다.TypeInitializationException uses the HRESULT COR_E_TYPEINITIALIZATION, which has the value 0x80131534.

인스턴스의 초기 속성 값의 목록을 TypeInitializationException, 참조는 TypeInitializationException 생성자입니다.For a list of initial property values for an instance of TypeInitializationException, see the TypeInitializationException constructors.

다음 섹션에서는 몇 가지는 상황을 TypeInitializationException 예외가 throw 됩니다.The following sections describe some of the situations in which a TypeInitializationException exception is thrown.

정적 생성자 및는 TypeInitializationExceptionStatic constructors and the TypeInitializationException

정적 생성자 있을 경우 라고 자동으로 런타임에서 형식의 새 인스턴스를 만들기 전에 합니다.A static constructor, if one exists, is called automatically by the runtime before creating a new instance of a type. 개발자가 정적 생성자를 명시적으로 정의할 수 있습니다.Static constructors can be explicitly defined by a developer. 정적 생성자를 명시적으로 정의 되어 있지 않으면 컴파일러가 자동으로 생성 초기화 static (C#에서) 또는 Shared (Visual Basic)에서는 형식의 멤버입니다.If a static constructor is not explicitly defined, compilers automatically create one to initialize any static (in C#) or Shared (in Visual Basic) members of the type. 정적 생성자에 대 한 자세한 내용은 참조 하세요. 정적 생성자합니다.For more information on static constructors, see Static Constructors.

가장 일반적으로 TypeInitializationException 정적 생성자가 형식을 인스턴스화할 수 없는 경우 예외가 throw 됩니다.Most commonly, a TypeInitializationException exception is thrown when a static constructor is unable to instantiate a type. InnerException 속성 이유를 나타내는 정적 생성자 형식을 인스턴스화할 수 있습니다.The InnerException property indicates why the static constructor was unable to instantiate the type. 더 일반적인 원인 중 일부는 TypeInitializationException 예외:Some of the more common causes of a TypeInitializationException exception are:

  • 정적 생성자에서는 처리 되지 않은 예외An unhandled exception in a static constructor

    정적 생성자에서 예외가 throw 되 면 해당 예외에 래핑됩니다는 TypeInitializationException 예외 및 형식을 인스턴스화할 수 없습니다.If an exception is thrown in a static constructor, that exception is wrapped in a TypeInitializationException exception, and the type cannot be instantiated.

    정적 생성자 소스 코드에 항상 명시적으로 정의 되지 않은 무엇을 사용 하면이 예외 문제 해결이 어렵습니다.What often makes this exception difficult to troubleshoot is that static constructors are not always explicitly defined in source code. 정적 생성자는 경우 형식에 있습니다.A static constructor exists in a type if:

    • 명시적으로 정의 된 형식의 멤버로 합니다.It has been explicitly defined as a member of a type.

    • 형식에 static (에서 C#) 또는 Shared (Visual Basic)에서는 변수를 선언 하 고 단일 문에서 초기화 됩니다.The type has static (in C#) or Shared (in Visual Basic) variables that are declared and initialized in a single statement. 이 경우 언어 컴파일러는 형식에 대 한 정적 생성자를 생성합니다.In this case, the language compiler generates a static constructor for the type. 같은 유틸리티를 사용 하 여 검사할 수 있습니다 IL Disassembler합니다.You can inspect it by using a utility such as IL Disassembler. 예를 들어 C# 및 VB 컴파일러는 다음 예제를 컴파일하려면 해당 IL은 다음과 유사 하 게 하는 정적 생성자에 대 한 생성 합니다.For instance, when the C# and VB compilers compile the following example, they generate the IL for a static constructor that is similar to this:

    .method private specialname rtspecialname static   
             void  .cctor() cil managed  
    {  
       // Code size       12 (0xc)  
       .maxstack  8  
       IL_0000:  ldc.i4.3  
       IL_0001:  newobj     instance void TestClass::.ctor(int32)  
       IL_0006:  stsfld     class TestClass Example::test  
       IL_000b:  ret  
    } // end of method Example::.cctor  
    

    다음 예제는 TypeInitializationException 컴파일러에서 생성 된 정적 생성자에서 throw 된 예외입니다.The following example shows a TypeInitializationException exception thrown by a compiler-generated static constructor. Example 클래스에 포함을 static (에서 C#) 또는 Shared (Visual Basic)에서는 형식의 필드 TestClass 3은 클래스 생성자에 전달 하 여 인스턴스화한 합니다.The Example class includes a static (in C#) or Shared (in Visual Basic) field of type TestClass that is instantiated by passing a value of 3 to its class constructor. 해당 값을 단, 유효 하지 않은; 0 또는 1 값만 허용 됩니다.That value, however, is illegal; only values of 0 or 1 are permitted. 결과적으로 TestClass throw 생성자 클래스는 ArgumentOutOfRangeException합니다.As a result, the TestClass class constructor throws an ArgumentOutOfRangeException. 이 예외가 처리 되지 않으면 때문에 래핑된는 TypeInitializationException 예외입니다.Since this exception is not handled, it is wrapped in a TypeInitializationException exception.

    using System;
    
    public class Example
    {
       private static TestClass test = new TestClass(3);
       
       public static void Main()
       {
          Example ex = new Example();
          Console.WriteLine(test.Value);
       }
    }
    
    public class TestClass
    {
       public readonly int Value;
       
       public TestClass(int value)
       {
          if (value < 0 || value > 1) throw new ArgumentOutOfRangeException();
          Value = value;
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: System.TypeInitializationException: 
    //       The type initializer for 'Example' threw an exception. ---> 
    //       System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
    //       at TestClass..ctor(Int32 value)
    //       at Example..cctor()
    //       --- End of inner exception stack trace ---
    //       at Example.Main()
    
    Public Class Example
       Shared test As New TestClass(3)
       
       Public Shared Sub Main()
          Dim ex As New Example()
          Console.WriteLine(test.Value)
       End Sub
    End Class
    
    Public Class TestClass
       Public ReadOnly Value As Integer
       
       Public Sub New(value As Integer)
          If value < 0 Or value > 1 Then Throw New ArgumentOutOfRangeException()
          Value = value
       End Sub
    End Class
    ' The example displays the following output:
    '    Unhandled Exception: System.TypeInitializationException: 
    '       The type initializer for 'Example' threw an exception. ---> 
    '       System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
    '       at TestClass..ctor(Int32 value)
    '       at Example..cctor()
    '       --- End of inner exception stack trace ---
    '       at Example.Main()
    

    예외 메시지에 대 한 정보를 표시 합니다 InnerException 속성입니다.Note that the exception message displays information about the InnerException property.

  • 누락 된 어셈블리나 데이터 파일A missing assembly or data file

    일반적인 원인입니다는 TypeInitializationException 애플리케이션의 개발 및 테스트 환경에 제공 된 어셈블리 또는 데이터 파일의 런타임 환경에서 누락 된 예외입니다.A common cause of a TypeInitializationException exception is that an assembly or data file that was present in an application's development and test environments is missing from its runtime environment. 예를 들어, 다음 예제에서는이 명령줄 구문을 사용 하 여 Missing1a.dll 이라는 어셈블리에 컴파일할 수 있습니다.For example, you can compile the following example to an assembly named Missing1a.dll by using this command-line syntax:

    csc -t:library Missing1a.cs  
    
    vbc Missing1a.vb -t:library  
    
    using System;
    
    public class InfoModule
    {
       private DateTime firstUse;
       private int ctr = 0;
    
       public InfoModule(DateTime dat)
       {
          firstUse = dat;
       }
       
       public int Increment()
       {
          return ++ctr;
       }
       
       public DateTime GetInitializationTime()
       {
          return firstUse;
       }
    }
    
    Public Class InfoModule
       Private firstUse As DateTime
       Private ctr As Integer = 0
    
       Public Sub New(dat As DateTime)
          firstUse = dat
       End Sub
       
       Public Function Increment() As Integer
          ctr += 1
          Return ctr
       End Function
       
       Public Function GetInitializationTime() As DateTime
          Return firstUse
       End Function
    End Class
    

    그런 다음 Missing1.exe Missing1a.dll에 대 한 참조를 포함 하 여 명명 된 실행 파일에 다음 예제를 컴파일할 수 있습니다.You can then compile the following example to an executable named Missing1.exe by including a reference to Missing1a.dll:

    csc Missing1.cs /r:Missing1a.dll  
    
    vbc Missing1.vb /r:Missing1a.dll  
    

    그러나 이름 바꾸기, 이동 또는 삭제 경우 Missing1a.dll 예제를 실행, throw를 TypeInitializationException 예외 예제와 같이 출력을 표시 합니다.However, if you rename, move, or delete Missing1a.dll and run the example, it throws a TypeInitializationException exception and displays the output shown in the example. 예외 메시지에 대 한 정보가 포함 됩니다는 InnerException 속성입니다.Note that the exception message includes information about the InnerException property. 내부 예외는이 경우에 FileNotFoundException 런타임에 종속 어셈블리를 찾을 수 없기 때문에 throw 되는 합니다.In this case, the inner exception is a FileNotFoundException that is thrown because the runtime cannot find the dependent assembly.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          Person p = new Person("John", "Doe");
          Console.WriteLine(p);   
       }
    }
    
    public class Person
    {
       static InfoModule infoModule;
       
       String fName;
       String mName;
       String lName;
       
       static Person()
       {
          infoModule = new InfoModule(DateTime.UtcNow);
       }
       
       public Person(String fName, String lName)
       {
          this.fName = fName;
          this.lName = lName;
          infoModule.Increment();
       }
       
       public override String ToString()
       {
          return String.Format("{0} {1}", fName, lName);
       }
    }
    // The example displays the following output if missing1a.dll is renamed or removed:
    //    Unhandled Exception: System.TypeInitializationException: 
    //       The type initializer for 'Person' threw an exception. ---> 
    //       System.IO.FileNotFoundException: Could not load file or assembly 
    //       'Missing1a, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 
    //       or one of its dependencies. The system cannot find the file specified.
    //       at Person..cctor()
    //       --- End of inner exception stack trace ---
    //       at Person..ctor(String fName, String lName)
    //       at Example.Main()
    
    Module Example
       Public Sub Main()
          Dim p As New Person("John", "Doe")
          Console.WriteLine(p)   
       End Sub
    End Module
    
    Public Class Person
       Shared infoModule As InfoModule
       
       Dim fName As String
       Dim mName As String
       Dim lName As String
       
       Shared Sub New()
          infoModule = New InfoModule(DateTime.UtcNow)
       End Sub
       
       Public Sub New(fName As String, lName As String)
          Me.fName = fName
          Me.lName = lName
          infoModule.Increment()
       End Sub
       
       Public Overrides Function ToString() As String
          Return String.Format("{0} {1}", fName, lName)
       End Function
    End Class
    ' The example displays the following output if missing1a.dll is renamed or removed:
    '    Unhandled Exception: System.TypeInitializationException: 
    '       The type initializer for 'Person' threw an exception. ---> 
    '       System.IO.FileNotFoundException: Could not load file or assembly 
    '       'Missing1a, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 
    '       or one of its dependencies. The system cannot find the file specified.
    '       at Person..cctor()
    '       --- End of inner exception stack trace ---
    '       at Person..ctor(String fName, String lName)
    '       at Example.Main()
    

    참고

    이 예제는 TypeInitializationException 어셈블리를 로드할 수 없습니다 때문에 예외가 발생 합니다.In this example, a TypeInitializationException exception was thrown because an assembly could not be loaded. 또한 구성 파일, XML 파일 또는 포함 된 파일 데이터를 찾을 수 없는 직렬화와 같은 정적 생성자가 데이터 파일을 열려고 할 경우이 예외가 발생 합니다.The exception can also be thrown if a static constructor attempts to open a data file, such as a configuration file, an XML file, or a file containing serialized data, that it cannot find.

정규식 일치 하는 시간 제한 값Regular expression match timeout values

응용 프로그램 도메인 별로 작업을 일치 하는 정규식 패턴에 대 한 기본 시간 제한 값을 설정할 수 있습니다.You can set the default timeout value for a regular expression pattern matching operation on a per-application domain basis. 제한 시간을 지정 하 여 정의 됩니다는 TimeSpan "REGEX_DEFAULT_MATCH_TIMEOUT" 속성에 대 한 값을 AppDomain.SetData 메서드.The timeout is defined by a specifying a TimeSpan value for the "REGEX_DEFAULT_MATCH_TIMEOUT" property to the AppDomain.SetData method. 시간 간격을 사용할 수 있어야 합니다 TimeSpan 개체 0 보다 크고 미만 약 24 일입니다.The time interval must be a valid TimeSpan object that is greater than zero and less than approximately 24 days. 이러한 요구 사항을 충족 되지 않는 경우 기본 시간 제한 값을 설정 하려고 throw를 ArgumentOutOfRangeException, 차례로에 래핑됩니다를 TypeInitializationException 예외입니다.If these requirements are not met, the attempt to set the default timeout value throws an ArgumentOutOfRangeException, which in turn is wrapped in a TypeInitializationException exception.

다음 예제는 TypeInitializationException "REGEX_DEFAULT_MATCH_TIMEOUT" 속성에 할당 된 값에 유효 하지 않을 때 throw 되는 합니다.The following example shows the TypeInitializationException that is thrown when the value assigned to the "REGEX_DEFAULT_MATCH_TIMEOUT" property is invalid. 예외를 제거 하려면 "REGEX_DEFAULT_MATCH_TIMEOUT" 속성을 설정 된 TimeSpan 0 보다 작거나 약 24 일 보다 큰 값입니다.To eliminate the exception, set the"REGEX_DEFAULT_MATCH_TIMEOUT" property to a TimeSpan value that is greater than zero and less than approximately 24 days.

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      AppDomain domain = AppDomain.CurrentDomain;
      // Set a timeout interval of -2 seconds.
      domain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(-2));

      Regex rgx = new Regex("[aeiouy]");
      Console.WriteLine("Regular expression pattern: {0}", rgx.ToString());
      Console.WriteLine("Timeout interval for this regex: {0} seconds",
                        rgx.MatchTimeout.TotalSeconds);
   }
}
// The example displays the following output:
//    Unhandled Exception: System.TypeInitializationException: 
//       The type initializer for 'System.Text.RegularExpressions.Regex' threw an exception. ---> 
//       System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
//       Parameter name: AppDomain data 'REGEX_DEFAULT_MATCH_TIMEOUT' contains an invalid value or 
//       object for specifying a default matching timeout for System.Text.RegularExpressions.Regex.
//       at System.Text.RegularExpressions.Regex.InitDefaultMatchTimeout()
//       at System.Text.RegularExpressions.Regex..cctor()
//       --- End of inner exception stack trace ---
//       at System.Text.RegularExpressions.Regex..ctor(String pattern)
//       at Example.Main()
Imports System.Text.RegularExpressions

Module Example
   Public Sub Main()
      Dim domain As AppDomain = AppDomain.CurrentDomain
      ' Set a timeout interval of -2 seconds.
      domain.SetData("REGEX_DEFAULT_MATCH_TIMEOUT", TimeSpan.FromSeconds(-2))

      Dim rgx As New Regex("[aeiouy]")
      Console.WriteLine("Regular expression pattern: {0}", rgx.ToString())
      Console.WriteLine("Timeout interval for this regex: {0} seconds",
                        rgx.MatchTimeout.TotalSeconds)
   End Sub
End Module
' The example displays the following output:
'    Unhandled Exception: System.TypeInitializationException: 
'       The type initializer for 'System.Text.RegularExpressions.Regex' threw an exception. ---> 
'       System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
'       Parameter name: AppDomain data 'REGEX_DEFAULT_MATCH_TIMEOUT' contains an invalid value or 
'       object for specifying a default matching timeout for System.Text.RegularExpressions.Regex.
'       at System.Text.RegularExpressions.Regex.InitDefaultMatchTimeout()
'       at System.Text.RegularExpressions.Regex..cctor()
'       --- End of inner exception stack trace ---
'       at System.Text.RegularExpressions.Regex..ctor(String pattern)
'       at Example.Main()

달력 및 문화권 데이터Calendars and cultural data

경우 일정을 인스턴스화하고 하려고 하지만 런타임이를 인스턴스화할 수 없는 경우는 CultureInfo 일정에 해당 하는 개체를 throw를 TypeInitializationException 예외.If you attempt to instantiate a calendar but the runtime is unable to instantiate the CultureInfo object that corresponds to that calendar, it throws a TypeInitializationException exception. 다음 달력 클래스 생성자에서이 예외가 throw 될 수 있습니다.This exception can be thrown by the following calendar class constructors:

이러한 문화권에 대 한 문화권 데이터는 모든 시스템에서 사용할 수 있어야, 있으므로 있습니다 해야 거의 경우 그 어느 때이 예외가 발생 합니다.Since cultural data for these cultures should be available on all systems, you should rarely, if ever, encounter this exception.

생성자

TypeInitializationException(String, Exception)

기본 오류 메시지, 지정된 형식 이름 및 해당 예외의 근본 원인인 내부 예외에 대한 참조를 사용하여 TypeInitializationException 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the TypeInitializationException class with the default error message, the specified type name, and a reference to the inner exception that is the root cause of this exception.

속성

Data

예외에 대한 사용자 정의 추가 정보를 제공하는 키/값 쌍의 컬렉션을 가져옵니다.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(다음에서 상속됨 Exception)
HelpLink

이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다.Gets or sets a link to the help file associated with this exception.

(다음에서 상속됨 Exception)
HResult

특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(다음에서 상속됨 Exception)
InnerException

현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다.Gets the Exception instance that caused the current exception.

(다음에서 상속됨 Exception)
Message

현재 예외를 설명하는 메시지를 가져옵니다.Gets a message that describes the current exception.

(다음에서 상속됨 Exception)
Source

오류를 발생시키는 애플리케이션 또는 개체의 이름을 가져오거나 설정합니다.Gets or sets the name of the application or the object that causes the error.

(다음에서 상속됨 Exception)
StackTrace

호출 스택의 직접 실행 프레임에 대한 문자열 표현을 가져옵니다.Gets a string representation of the immediate frames on the call stack.

(다음에서 상속됨 Exception)
TargetSite

현재 예외를 throw하는 메서드를 가져옵니다.Gets the method that throws the current exception.

(다음에서 상속됨 Exception)
TypeName

초기화에 실패한 형식의 정규화된 이름을 가져옵니다.Gets the fully qualified name of the type that fails to initialize.

메서드

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetBaseException()

파생 클래스에서 재정의되었을 때, 하나 이상의 후속 예외의 근본 원인이 되는 Exception을 반환합니다.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(다음에서 상속됨 Exception)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetObjectData(SerializationInfo, StreamingContext)

형식 이름 및 추가 예외 정보를 사용하여 SerializationInfo 개체를 설정합니다.Sets the SerializationInfo object with the type name and additional exception information.

GetType()

현재 인스턴스의 런타임 형식을 가져옵니다.Gets the runtime type of the current instance.

(다음에서 상속됨 Exception)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 예외에 대한 문자열 표현을 만들고 반환합니다.Creates and returns a string representation of the current exception.

(다음에서 상속됨 Exception)

이벤트

SerializeObjectState

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(다음에서 상속됨 Exception)

적용 대상

추가 정보