TypeInitializationException Klasa

Definicja

Wyjątek, który jest generowany jako otoka wokół wyjątku zgłoszonego przez inicjatora klasy.The exception that is thrown as a wrapper around the exception thrown by the class initializer. Klasa ta nie może być dziedziczona.This class cannot be inherited.

public ref class TypeInitializationException sealed : Exception
public ref class TypeInitializationException sealed : SystemException
public sealed class TypeInitializationException : Exception
public sealed class TypeInitializationException : SystemException
[System.Serializable]
public sealed class TypeInitializationException : SystemException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class TypeInitializationException : SystemException
type TypeInitializationException = class
    inherit Exception
type TypeInitializationException = class
    inherit SystemException
[<System.Serializable>]
type TypeInitializationException = class
    inherit SystemException
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type TypeInitializationException = class
    inherit SystemException
Public NotInheritable Class TypeInitializationException
Inherits Exception
Public NotInheritable Class TypeInitializationException
Inherits SystemException
Dziedziczenie
TypeInitializationException
Dziedziczenie
TypeInitializationException
Atrybuty

Uwagi

Gdy inicjator klasy nie może zainicjować typu, TypeInitializationException zostaje utworzony i przeszedł odwołanie do wyjątku zgłoszonego przez inicjator klasy typu.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. InnerExceptionWłaściwość TypeInitializationException zawiera wyjątek podstawowy.The InnerException property of TypeInitializationException holds the underlying exception.

Zwykle TypeInitializationException wyjątek odzwierciedla warunek katastrofalny (środowisko uruchomieniowe nie może utworzyć wystąpienia typu), które uniemożliwia kontynuowanie działania aplikacji.Typically, the TypeInitializationException exception reflects a catastrophic condition (the runtime is unable to instantiate a type) that prevents an application from continuing. Najczęściej TypeInitializationException jest zgłaszany w odpowiedzi na pewne zmiany w środowisku wykonywanym aplikacji.Most commonly, the TypeInitializationException is thrown in response to some change in the executing environment of the application. W związku z tym, inne niż prawdopodobnie do rozwiązywania problemów z kodem debugowania, wyjątek nie powinien być obsługiwany w try / catch bloku.Consequently, other than possibly for troubleshooting debug code, the exception should not be handled in a try/catch block. Zamiast tego należy zbadać i wyeliminować przyczynę wyjątku.Instead, the cause of the exception should be investigated and eliminated.

TypeInitializationException używa COR_E_TYPEINITIALIZATION HRESULT, który ma wartość 0x80131534.TypeInitializationException uses the HRESULT COR_E_TYPEINITIALIZATION, which has the value 0x80131534.

Aby uzyskać listę początkowych wartości właściwości dla wystąpienia TypeInitializationException , zobacz TypeInitializationException konstruktory.For a list of initial property values for an instance of TypeInitializationException, see the TypeInitializationException constructors.

W poniższych sekcjach opisano niektóre sytuacje, w których TypeInitializationException wyjątek jest zgłaszany.The following sections describe some of the situations in which a TypeInitializationException exception is thrown.

Konstruktory statyczne i TypeInitializationExceptionStatic constructors and the TypeInitializationException

Statyczny Konstruktor, jeśli taki istnieje, jest wywoływany automatycznie przez środowisko uruchomieniowe przed utworzeniem nowego wystąpienia typu.A static constructor, if one exists, is called automatically by the runtime before creating a new instance of a type. Konstruktory statyczne mogą być jawnie definiowane przez dewelopera.Static constructors can be explicitly defined by a developer. Jeśli statyczny Konstruktor nie jest jawnie zdefiniowany, kompilatory automatycznie tworzą jeden do inicjowania dowolnego static (w języku C#) lub Shared (w Visual Basic) elementów członkowskich typu.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. Aby uzyskać więcej informacji na temat konstruktorów statycznych, zobacz statyczne konstruktory.For more information on static constructors, see Static Constructors.

Najczęściej TypeInitializationException wyjątek jest zgłaszany, gdy Konstruktor statyczny nie może utworzyć wystąpienia typu.Most commonly, a TypeInitializationException exception is thrown when a static constructor is unable to instantiate a type. InnerExceptionWłaściwość wskazuje, dlaczego Konstruktor statyczny nie mógł utworzyć wystąpienia typu.The InnerException property indicates why the static constructor was unable to instantiate the type. Niektóre z najczęstszych przyczyn TypeInitializationException wyjątku są następujące:Some of the more common causes of a TypeInitializationException exception are:

  • Nieobsługiwany wyjątek w konstruktorze statycznymAn unhandled exception in a static constructor

    Jeśli wyjątek jest zgłaszany w konstruktorze statycznym, ten wyjątek jest opakowany w TypeInitializationException wyjątek i nie można utworzyć wystąpienia tego typu.If an exception is thrown in a static constructor, that exception is wrapped in a TypeInitializationException exception, and the type cannot be instantiated.

    Często ten wyjątek utrudnia rozwiązywanie problemów polega na tym, że konstruktory statyczne nie są zawsze jawnie zdefiniowane w kodzie źródłowym.What often makes this exception difficult to troubleshoot is that static constructors are not always explicitly defined in source code. Statyczny Konstruktor istnieje w typie, jeśli:A static constructor exists in a type if:

    • Został jawnie zdefiniowany jako element członkowski typu.It has been explicitly defined as a member of a type.

    • Typ ma static (w języku C#) lub Shared (w Visual Basic) zmienne, które są zadeklarowane i inicjowane w pojedynczej instrukcji.The type has static (in C#) or Shared (in Visual Basic) variables that are declared and initialized in a single statement. W takim przypadku kompilator języka generuje statyczny Konstruktor dla tego typu.In this case, the language compiler generates a static constructor for the type. Można je sprawdzić za pomocą narzędzia, takiego jak Il dezasembler.You can inspect it by using a utility such as IL Disassembler. Na przykład, gdy kompilatory języka C# i VB kompilują Poniższy przykład, generują IL dla konstruktora statycznego, który jest podobny do następującego: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  
    

    Poniższy przykład pokazuje TypeInitializationException wyjątek zgłoszony przez Konstruktor statyczny wygenerowany przez kompilator.The following example shows a TypeInitializationException exception thrown by a compiler-generated static constructor. ExampleKlasa zawiera static pole (w języku C#) lub Shared (w Visual Basic) typu TestClass , którego wystąpienie jest tworzone przez przekazanie wartości 3 do jej konstruktora klasy.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. Ta wartość jest jednak niedozwolona; dozwolone są tylko wartości 0 i 1.That value, however, is illegal; only values of 0 or 1 are permitted. W efekcie TestClass Konstruktor klasy zgłasza ArgumentOutOfRangeException .As a result, the TestClass class constructor throws an ArgumentOutOfRangeException. Ponieważ ten wyjątek nie jest obsługiwany, jest opakowany w TypeInitializationException wyjątek.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()
    

    Należy zauważyć, że komunikat o wyjątku wyświetla informacje o InnerException właściwości.Note that the exception message displays information about the InnerException property.

  • Brak zestawu lub pliku danychA missing assembly or data file

    Typową przyczyną TypeInitializationException wyjątku jest to, że w środowisku uruchomieniowym brakuje zestawu lub pliku danych, który był obecny w środowiskach deweloperskich i testowych aplikacji.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. Na przykład, można skompilować następujący przykład do zestawu o nazwie Missing1a.dll przy użyciu tej składni wiersza polecenia: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
    

    Następnie można skompilować następujący przykład do pliku wykonywalnego o nazwie Missing1.exe, dołączając odwołanie do 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  
    

    Jeśli jednak zmienisz nazwę, przeniesiesz lub usuniesz Missing1a.dll i uruchomisz przykład, zgłosi TypeInitializationException wyjątek i wyświetli dane wyjściowe widoczne w przykładzie.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. Należy zauważyć, że komunikat o wyjątku zawiera informacje o InnerException właściwości.Note that the exception message includes information about the InnerException property. W tym przypadku wyjątek wewnętrzny jest FileNotFoundException zgłaszany, ponieważ środowisko uruchomieniowe nie może znaleźć zestawu zależnego.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()
    

    Uwaga

    W tym przykładzie TypeInitializationException Wystąpił wyjątek, ponieważ nie można załadować zestawu.In this example, a TypeInitializationException exception was thrown because an assembly could not be loaded. Wyjątek może być również zgłaszany, jeśli statyczny Konstruktor próbuje otworzyć plik danych, taki jak plik konfiguracyjny, plik XML lub plik zawierający dane serializowane, którego nie można znaleźć.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.

Wartości limitu czasu dopasowania wyrażenia regularnegoRegular expression match timeout values

Można ustawić domyślną wartość limitu czasu dla operacji dopasowania wzorca wyrażenia regularnego dla domeny dla poszczególnych aplikacji.You can set the default timeout value for a regular expression pattern matching operation on a per-application domain basis. Limit czasu jest definiowany przez określenie TimeSpan wartości właściwości "REGEX_DEFAULT_MATCH_TIMEOUT" dla AppDomain.SetData metody.The timeout is defined by a specifying a TimeSpan value for the "REGEX_DEFAULT_MATCH_TIMEOUT" property to the AppDomain.SetData method. Interwał czasu musi być prawidłowym TimeSpan obiektem, który jest większy od zera i mniejszy niż około 24 dni.The time interval must be a valid TimeSpan object that is greater than zero and less than approximately 24 days. Jeśli te wymagania nie są spełnione, próba ustawienia domyślnej wartości limitu czasu zgłasza ArgumentOutOfRangeException , która z kolei jest opakowana w TypeInitializationException wyjątek.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.

Poniższy przykład pokazuje TypeInitializationException , że jest generowany, gdy wartość przypisana do właściwości "REGEX_DEFAULT_MATCH_TIMEOUT" jest nieprawidłowa.The following example shows the TypeInitializationException that is thrown when the value assigned to the "REGEX_DEFAULT_MATCH_TIMEOUT" property is invalid. Aby wyeliminować wyjątek, ustaw właściwość "REGEX_DEFAULT_MATCH_TIMEOUT" na TimeSpan wartość większą od zera i mniejszą niż około 24 dni.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()

Kalendarze i dane kulturoweCalendars and cultural data

Jeśli spróbujesz utworzyć wystąpienie kalendarza, ale środowisko uruchomieniowe nie może utworzyć wystąpienia CultureInfo obiektu odpowiadającego temu kalendarzowi, zgłasza TypeInitializationException wyjątek.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. Ten wyjątek może być zgłaszany przez następujące konstruktory klas kalendarza:This exception can be thrown by the following calendar class constructors:

Ze względu na to, że dane kulturowe dla tych kultur powinny być dostępne we wszystkich systemach, należy rzadko, jeśli kiedykolwiek wystąpi ten wyjątek.Since cultural data for these cultures should be available on all systems, you should rarely, if ever, encounter this exception.

Konstruktory

TypeInitializationException(String, Exception)

Inicjuje nowe wystąpienie TypeInitializationException klasy z domyślnym komunikatem o błędzie, określoną nazwą typu i odwołaniem do wewnętrznego wyjątku, który jest główną przyczyną tego wyjątku.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.

Właściwości

Data

Pobiera kolekcję par klucz/wartość, które zawierają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Odziedziczone po Exception)
HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.Gets or sets a link to the help file associated with this exception.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia wartość HRESULT, kodowane wartości liczbowe przypisane do określonego wyjątku.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Odziedziczone po Exception)
InnerException

Pobiera Exception wystąpienie, które spowodowało bieżący wyjątek.Gets the Exception instance that caused the current exception.

(Odziedziczone po Exception)
Message

Pobiera komunikat, który opisuje bieżący wyjątek.Gets a message that describes the current exception.

(Odziedziczone po Exception)
Source

Pobiera lub ustawia nazwę aplikacji lub obiekt, który powoduje błąd.Gets or sets the name of the application or the object that causes the error.

(Odziedziczone po Exception)
StackTrace

Pobiera ciąg reprezentujący bezpośrednie ramki w stosie wywołań.Gets a string representation of the immediate frames on the call stack.

(Odziedziczone po Exception)
TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.Gets the method that throws the current exception.

(Odziedziczone po Exception)
TypeName

Pobiera w pełni kwalifikowaną nazwę typu, którego nie można zainicjować.Gets the fully qualified name of the type that fails to initialize.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetBaseException()

Gdy jest zastępowany w klasie pochodnej, zwraca wartość Exception będącą główną przyczyną jednego lub kilku kolejnych wyjątków.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Ustawia SerializationInfo obiekt z nazwą typu i dodatkowymi informacjami o wyjątku.Sets the SerializationInfo object with the type name and additional exception information.

GetObjectData(SerializationInfo, StreamingContext)

Gdy jest zastępowany w klasie pochodnej, ustawia SerializationInfo Informacje o wyjątku.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Odziedziczone po Exception)
GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.Gets the runtime type of the current instance.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Tworzy i zwraca reprezentację ciągu bieżącego wyjątku.Creates and returns a string representation of the current exception.

(Odziedziczone po Exception)

Zdarzenia

SerializeObjectState

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Odziedziczone po Exception)

Dotyczy

Zobacz też