TypeInitializationException Klasse
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

TypeInitializationException-Klasse

 

Die Ausnahme, die als Wrapper um die von dieser Klasseninitialisierung ausgelöste Ausnahme ausgelöst wird. Diese Klasse kann nicht vererbt werden.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.TypeInitializationException

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class TypeInitializationException : SystemException

NameBeschreibung
System_CAPS_pubmethodTypeInitializationException(String, Exception)

Initialisiert eine neue Instanz der TypeInitializationException -Klasse mit der Fehlermeldung, dem angegebenen Typnamen und einen Verweis auf die innere Ausnahme, die die Ursache dieser Ausnahme ist.

NameBeschreibung
System_CAPS_pubpropertyData

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen über die Ausnahme bereitstellen.(Geerbt von Exception.)

System_CAPS_pubpropertyHelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.(Geerbt von Exception.)

System_CAPS_pubpropertyHResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.(Geerbt von Exception.)

System_CAPS_pubpropertyInnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.(Geerbt von Exception.)

System_CAPS_pubpropertyMessage

Ruft eine Meldung ab, die die aktuelle Ausnahme beschreibt.(Geerbt von Exception.)

System_CAPS_pubpropertySource

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.(Geerbt von Exception.)

System_CAPS_pubpropertyStackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.(Geerbt von Exception.)

System_CAPS_pubpropertyTargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.(Geerbt von Exception.)

System_CAPS_pubpropertyTypeName

Ruft den vollqualifizierten Namen des Typs, der nicht initialisiert werden kann.

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von Object.)

System_CAPS_pubmethodGetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die ursprüngliche Ursache für eine oder mehrere nachfolgende Ausnahmen ist.(Geerbt von Exception.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Legt die SerializationInfo -Objekt mit dem Typnamen und zusätzlichen Informationen zur Ausnahme.(Setzt "Exception.GetObjectData(SerializationInfo, StreamingContext)" außer Kraft.)

System_CAPS_pubmethodGetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.(Geerbt von Exception.)

System_CAPS_pubmethodToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.(Geerbt von Exception.)

Wenn die Initialisierung eines Typs durch eine Klasseninitialisierung fehlschlägt, wird eine TypeInitializationException erstellt. Dieser Ausnahme wird dann ein Verweis auf die Ausnahme übergeben, die durch die Klasseninitialisierung des Typs ausgelöst wurde. Die InnerException -Eigenschaft des TypeInitializationException enthält die zugrunde liegende Ausnahme.

In der Regel die TypeInitializationException Ausnahme eine schwerwiegende Bedingung entspricht (die Common Language Runtime kann einen Typ zu instanziieren), die verhindert, dass eine Anwendung nicht fortgesetzt werden kann. In den meisten Fällen die TypeInitializationException als Antwort auf eine Änderung in der Umgebung Ausführen der Anwendung ausgelöst wird. Folglich außer möglicherweise für die Problembehandlung Debuggen von Code, die Ausnahme nicht behandelt werden einer try/catch Block. In diesem Fall sollte die Ursache der Ausnahme untersucht und beseitigt werden.

TypeInitializationException verwendet HRESULT COR_E_TYPEINITIALIZATION mit dem Wert 0 x 80131534.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz von TypeInitializationException, finden Sie unter der TypeInitializationException Konstruktoren.

Die folgenden Abschnitte beschreiben einige Situationen, in denen eine TypeInitializationException Ausnahme ausgelöst.

Statische Konstruktoren und der TypeInitializationException-Ausnahme
Timeoutwerte für reguläre Ausdrücke übereinstimmen
Kalender und kulturellen Daten

Statische Konstruktoren, wird sofern vorhanden, automatisch von der Laufzeit aufgerufen vor dem Erstellen einer neuen Instanz eines Typs. Statische Konstruktoren können von einem Entwickler explizit definiert werden. Wenn ein statischer Konstruktor nicht explizit definiert ist, erstellen Compiler automatisch einen Eintrag, um alle static (in c#) oder Shared (in Visual Basic) Member dieses Typs. Weitere Informationen zu statischen Konstruktoren, finden Sie unter Statische Konstruktoren (C#-Programmierhandbuch).

In den meisten Fällen eine TypeInitializationException Ausnahme wird ausgelöst, wenn ein statischer Konstruktor einen Typ zu instanziieren kann. Die InnerException -Eigenschaft gibt an, warum der statische Konstruktor zur Instanziierung des Typs werden konnte. Einige der häufigsten Ursachen für eine TypeInitializationException Ausnahme:

Eine nicht behandelte Ausnahme in einem statischen Konstruktor

Wenn eine Ausnahme in einem statischen Konstruktor ausgelöst wird, wird diese Ausnahme innerhalb einer TypeInitializationException Ausnahme und der Typ kann nicht instanziiert werden.

Wie ist oft diese Ausnahme schwierig zu beheben, dass statische Konstruktoren nicht immer explizit im Code definiert sind. Ein statischer Konstruktor ist in einem Typ vorhanden, wenn:

  • Es wurde als Member eines Typs explizit definiert.

  • Der Typ verfügt über static (in c#) oder Shared (in Visual Basic) Variablen deklariert und initialisiert, die in einer einzelnen Anweisung. In diesem Fall generiert der Sprachcompiler einen statischen Konstruktor für den Typ. Sie können überprüfen, wie z. B. mit einem Dienstprogramm IL-Disassembler. Wenn der C#- und VB-Compiler das folgende Beispiel kompilieren, generieren sie z. B. den IL-Code für einen statischen Konstruktor, der etwa wie folgt:

    
    .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
    
    

Das folgende Beispiel zeigt eine TypeInitializationException vom Compiler generierte statische Konstruktoren ausgelöste Ausnahme. Die Example -Klasse enthält eine static (in c#) oder Shared (in Visual Basic)-Feld des Typs TestClass instanziiert, indem der Wert 3 an seinen Klassenkonstruktor übergeben. Dieser Wert ist jedoch ungültig. nur die Werte 0 oder 1 sind zulässig. Daher die TestClass -Klasse löst der Konstruktor eine ArgumentOutOfRangeException. Da diese Ausnahme nicht behandelt wird, ist die eingebunden eine TypeInitializationException Ausnahme.

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()

Beachten Sie, dass die Ausnahme Informationen zur Meldung der InnerException Eigenschaft.

Eine fehlende Datei Assembly oder Daten

Eine häufige Ursache für eine TypeInitializationException Ausnahme ist, dass eine Assembly oder Datendatei, die in einer Anwendung Entwicklungs- und Test vorhanden war die Common Language Runtime-Umgebung nicht vorhanden ist. Sie können z. B. im folgende Beispiel für eine Assembly namens Missing1a.dll mithilfe dieser kompilieren Befehlszeilensyntax:

csc /t:library Missing1a.cs
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;
   }
}

Sie können dann im folgende Beispiel in eine ausführbare Datei mit dem Namen Missing1.exe durch einen Verweis auf Missing1a.dll kompilieren:

csc Missing1.cs /r:Missing1a.dll

Wenn Sie umbenennen, verschieben oder Missing1a.dll löschen und führen Sie das Beispiel, jedoch löst eine TypeInitializationException Ausnahme und zeigt die Ausgabe im Beispiel gezeigt. Beachten Sie, dass die Meldung zur Ausnahme dazu zählen Informationen zu den InnerException Eigenschaft. In diesem Fall die innere Ausnahme ist eine FileNotFoundException die ausgelöst wird, da die Common Language Runtime die abhängige Assembly nicht finden kann.

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()
System_CAPS_noteHinweis

In diesem Beispiel eine TypeInitializationException Ausnahme wurde ausgelöst, da eine Assembly nicht geladen werden konnte. Die Ausnahme kann auch ausgelöst werden, wenn ein statischer Konstruktor versucht, eine Datendatei zu öffnen, wie z. B. serialisiert eine Konfigurationsdatei, eine XML-Datei oder eine Datei mit Daten, die nicht.

Sie können die Standard-Timeoutwert für das Muster eines regulären Ausdrucks Abgleichvorgang jeweils pro Anwendungsdomäne festlegen. Das Timeout wird definiert, indem ein, der angibt ein TimeSpan Wert für die Eigenschaft "REGEX_DEFAULT_MATCH_TIMEOUT", um die AppDomain.SetData Methode. Das Zeitintervall muss eine gültige TimeSpan Objekt, das größer als 0 (null) und kleiner ist als ca. 24 Tage. Wenn diese Anforderungen nicht erfüllt sind, löst der Versuch, legen Sie die Standard-Timeoutwert eine ArgumentOutOfRangeException, die wiederum umschlossen eine TypeInitializationException Ausnahme.

Das folgende Beispiel zeigt die TypeInitializationException die ausgelöst wird, wenn die Eigenschaft "REGEX_DEFAULT_MATCH_TIMEOUT" zugewiesene Wert ungültig ist. Um die Ausnahme zu vermeiden, legen Sie die Eigenschaft "REGEX_DEFAULT_MATCH_TIMEOUT" auf einen TimeSpan Wert, der größer als 0 (null) und kleiner ist als ca. 24 Tage.

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()

Wenn Sie versuchen, einen Kalender zu instanziieren, aber die Common Language Runtime ist konnte nicht instanziiert werden die CultureInfo Objekt, das diesen Kalender entspricht, löst eine TypeInitializationException Ausnahme. Diese Ausnahme kann durch die folgenden Konstruktoren der Calendar-Klasse ausgelöst werden:

Da kulturelle Daten für diese Kulturen auf allen Systemen verfügbar sein sollte, sollte Sie nur selten, wenn überhaupt, diese Ausnahme auftreten.

Universal Windows Platform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Öffentliche statische (in Visual Basic freigegebene) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Zurück zum Anfang
Anzeigen:
© 2016 Microsoft