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

BadImageFormatException-Klasse

 

Veröffentlicht: Oktober 2016

Die Ausnahme, die ausgelöst wird, wenn das Dateiimage einer Dynamic Link Library (DLL) oder eines ausführbaren Programms ungültig ist.

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

System.Object
  System.Exception
    System.SystemException
      System.BadImageFormatException

<SerializableAttribute>
<ComVisibleAttribute(True)>
Public Class BadImageFormatException
	Inherits SystemException

NameBeschreibung
System_CAPS_pubmethodBadImageFormatException()

Initialisiert eine neue Instanz der BadImageFormatException-Klasse.

System_CAPS_protmethodBadImageFormatException(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der BadImageFormatException-Klasse mit serialisierten Daten.

System_CAPS_pubmethodBadImageFormatException(String)

Initialisiert eine neue Instanz der BadImageFormatException-Klasse mit einer angegebenen Fehlermeldung.

System_CAPS_pubmethodBadImageFormatException(String, Exception)

Initialisiert eine neue Instanz der BadImageFormatException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

System_CAPS_pubmethodBadImageFormatException(String, String)

Initialisiert eine neue Instanz der dem BadImageFormatException Klasse mit einer angegebenen Fehlermeldung Nachricht und der Dateiname.

System_CAPS_pubmethodBadImageFormatException(String, String, Exception)

Initialisiert eine neue Instanz der BadImageFormatException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

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_pubpropertyFileName

Ruft den Namen der Datei ab, die diese Ausnahme verursacht hat.

System_CAPS_pubpropertyFusionLog

Ruft die Protokolldatei ab, in der beschrieben wird, warum das Laden einer Assembly fehlschlug.

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 die Fehlermeldung und den Namen der Datei ab, die diese Ausnahme verursacht hat.(Überschreibt Exception.Message.)

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“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (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 Dateinamen Assemblycache-Protokoll und zusätzlichen Informationen zur Ausnahme.(Überschreibt Exception.GetObjectData(SerializationInfo, StreamingContext).)

System_CAPS_pubmethodGetType()

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

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Gibt den vollqualifizierten Namen dieser Ausnahme und ggf. die Fehlermeldung sowie den Namen der inneren Ausnahme und die Stapelüberwachung zurück.(Überschreibt Exception.ToString().)

NameBeschreibung
System_CAPS_proteventSerializeObjectState

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt zu erstellen, das serialisierte Daten für die Ausnahme enthält.(Geerbt von „Exception“.)

Diese Ausnahme wird ausgelöst, wenn das Dateiformat einer dynamic Link Library (DLL-Datei) oder einer ausführbaren Datei (.exe-Datei) in das Format entsprechen nicht, die die common Language Runtime erwartet. Die Ausnahme ist insbesondere in den folgenden Situationen ausgelöst:

  • Eine frühere Version von .NET Framework-Hilfsprogramms, z. B. ILDasm.exe oder installutil.exe, wird mit einer Assembly verwendet, die mit einer höheren Version von .NET Framework entwickelt wurde.

    Um diese Ausnahme zu behandeln, verwenden Sie die Version des Tools, die die Version von .NET Framework entspricht, die zum Entwickeln der Assembly verwendet wurde. Dies erfordert möglicherweise, ändern die Path -Umgebungsvariablen oder einen vollqualifizierten Pfad zur ausführbaren Datei richtigen bereitstellen.

  • Sie versuchen, eine nicht verwaltete dynamic Link Library oder eine ausführbare Datei (z. B. einer WindowsSystem-DLL) zu laden, als handele es sich um eine .NET Framework-Assembly. Das folgende Beispiel veranschaulicht dies mithilfe der Assembly.LoadFile -Methode zum Laden von Kernel32.dll.

    ' Windows DLL (non-.NET assembly)
    Dim filePath As String = Environment.ExpandEnvironmentVariables("%windir%")
    If Not filePath.Trim().EndsWith("\") Then filepath += "\"
    filePath += "System32\Kernel32.dll"
    Try
       Dim assem As Assembly = Assembly.LoadFile(filePath)
    Catch e As BadImageFormatException
       Console.WriteLine("Unable to load {0}.", filePath)
       Console.WriteLine(e.Message.Substring(0, _
                         e.Message.IndexOf(".") + 1))   
    End Try
    ' The example displays an error message like the following:
    '       Unable to load C:\WINDOWS\System32\Kernel32.dll.
    '       The module was expected to contain an assembly manifest.
    

    Zugriff auf die Methoden, die in der DLL definiert wird, mithilfe der Funktionen, wie z. B. von der Entwicklungssprache bereitgestellt, um diese Ausnahme zu behandeln, die Declare -Anweisung in Visual Basic oder DllImportAttribute -Attribut mit dem extern -Schlüsselwort in c#.

  • Eine DLL oder ausführbare Datei wird als 64-Bit-Assembly geladen, aber es enthält 32-Bit-Funktionen oder Ressourcen. Beispielsweise verwendet COM-Interop oder ruft Methoden in einer 32-Bit-dynamic Link Library.

    Um diese Ausnahme zu behandeln, legen Sie die Zielplattform Eigenschaft X86 (anstelle von X64 oder "anycpu") und kompilieren Sie erneut.

  • Komponenten der Anwendung wurden mit verschiedenen Versionen von .NET Framework erstellt. In der Regel wird diese Ausnahme tritt auf, wenn eine Anwendung oder Komponente, die entwickelt wurde, mit der .NET Framework 1.0 oder die .NET Framework 1.1 versucht, eine Assembly zu laden, die mit entwickelt wurde die .NET Framework 2.0 SP1 oder höher verwenden oder eine Anwendung, die entwickelt wurde, mit der .NET Framework 2.0 SP1 oder .NET Framework 3.5 versucht, eine Assembly zu laden, die mit entwickelt wurde die .NET Framework 4 oder höher. Die BadImageFormatException möglicherweise als ein Kompilierzeitfehler gemeldet, oder die Ausnahme wird möglicherweise zur Laufzeit ausgelöst. Das folgende Beispiel definiert eine StringLib Klasse, die ein einzelnes Element verfügt ToProperCase, und, die sich in einer Assembly mit dem Namen StringLib.dll befindet.

    Public Module StringLib
       Private exceptionList() As String = { "a", "an", "the", "in", "on", "of" }
       Private separators() As Char = { " "c }
    
       Public Function ToProperCase(title As String) As String
          Dim isException As Boolean = False	
    
          Dim words() As String = title.Split( separators, StringSplitOptions.RemoveEmptyEntries)
          Dim newWords(words.Length) As String
    
          For ctr As Integer = 0 To words.Length - 1
             isException = False
    
             For Each exception As String In exceptionList
                If words(ctr).Equals(exception) And ctr > 0 Then
                   isException = True
                   Exit For
                End If
             Next
             If Not isException Then
                newWords(ctr) = words(ctr).Substring(0, 1).ToUpper() + words(ctr).Substring(1)
             Else
                newWords(ctr) = words(ctr)	 
             End If	 
          Next	
          Return String.Join(" ", newWords) 			
       End Function
    End Module
    

    Im folgenden Beispiel wird Reflektion zum Laden einer Assembly mit dem Namen StringLib.dll. Wenn Quellcode kompiliert wird, mit einer .NET Framework 1.1 -Compiler eine BadImageFormatException von ausgelöst wird die Assembly.LoadFrom Methode.

    Imports System.Reflection
    
    Module Example
       Public Sub Main()
          Dim title As String = "a tale of two cities"
          ' Load assembly containing StateInfo type.
          Dim assem As Assembly = Assembly.LoadFrom(".\StringLib.dll")
          ' Get type representing StateInfo class.
          Dim stateInfoType As Type = assem.GetType("StringLib")
          ' Get Display method.
          Dim mi As MethodInfo = stateInfoType.GetMethod("ToProperCase")
          ' Call the Display method. 
          Dim properTitle As String = CStr(mi.Invoke(Nothing, New Object() { title } ))
          Console.WriteLine(properTitle)
       End Sub
    End Module
    ' Attempting to load the StringLib.dll assembly produces the following output:
    '    Unhandled Exception: System.BadImageFormatException: 
    '                         The format of the file 'StringLib.dll' is invalid.
    

    Um diese Ausnahme zu behandeln, stellen Sie sicher, dass die Assembly, deren Code ausgeführt wird und dass ausgelöst wird, die Ausnahme und die Assembly geladen werden, kompatible Versionen von .NET Framework abzielen.

  • Die Komponenten der Anwendung auf verschiedenen Plattformen ausgerichtet. Sie möchten z. B. Laden von ARM-Assemblys in x X86 Anwendung. Die folgenden Befehlszeile-Hilfsprogramm können Sie um die Zielplattformen eines einzelnen .NET Framework-Assemblys zu bestimmen. Die Liste der Dateien sollten als eine durch Leerzeichen getrennte Liste in der Befehlszeile angegeben werden.

    Imports System.IO
    Imports System.Reflection
    
    Module Example
       Public Sub Main()
          Dim args() As String = Environment.GetCommandLineArgs()
          If args.Length = 1 Then
             Console.WriteLine()
             Console.WriteLine("Syntax:   PlatformInfo <filename> ")
             Console.WriteLine()
             Exit Sub
          End If
          Console.WriteLine()
    
          ' Loop through files and display information about their platform.
          For ctr As Integer = 1 To args.Length - 1
             Dim fn As String = args(ctr)
             If Not File.Exists(fn) Then
                Console.WriteLine("File: {0}", fn)
                Console.WriteLine("The file does not exist.")
                Console.WriteLine()
             Else
                Try
                   Dim an As AssemblyName = AssemblyName.GetAssemblyName(fn)
                   Console.WriteLine("Assembly: {0}", an.Name)
                   If an.ProcessorArchitecture = ProcessorArchitecture.MSIL Then
                      Console.WriteLine("Architecture: AnyCPU")
                   Else
                      Console.WriteLine("Architecture: {0}", an.ProcessorArchitecture)
                   End If
                Catch e As BadImageFormatException
                   Console.WriteLine("File: {0}", fn)
                   Console.WriteLine("Not a valid assembly.\n")
                End Try
                Console.WriteLine()
             End If
          Next
       End Sub
    End Module
    
  • Diese Ausnahme kann durch Reflektion auf ausführbare Dateien in C++ ausgelöst werden. Meistens hat dabei der C++-Compiler die Umsetzungsadressen oder den .Reloc-Abschnitt der ausführbaren Datei entfernt. Damit die Umsetzungsadresse in einer ausführbaren Datei von C++ erhalten bleibt, geben Sie / fixed: No beim verknüpfen.

BadImageFormatExceptionverwendet HRESULT COR_E_BADIMAGEFORMAT mit den Wert 0x8007000B.

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: