BadImageFormatException BadImageFormatException BadImageFormatException BadImageFormatException Class

Definición

Excepción que se produce cuando la imagen de archivo de una biblioteca de vínculos dinámicos (DLL) o un programa ejecutable no es válida.The exception that is thrown when the file image of a dynamic link library (DLL) or an executable program is invalid.

public ref class BadImageFormatException : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class BadImageFormatException : SystemException
type BadImageFormatException = class
    inherit SystemException
Public Class BadImageFormatException
Inherits SystemException
Herencia
BadImageFormatExceptionBadImageFormatExceptionBadImageFormatExceptionBadImageFormatException
Atributos

Comentarios

Esta excepción se produce cuando el formato de archivo de una biblioteca de vínculos dinámicos (archivo .dll) o un archivo ejecutable (archivo .exe) no se ajusta al formato que espera common language runtime.This exception is thrown when the file format of a dynamic link library (.dll file) or an executable (.exe file) doesn't conform to the format that the common language runtime expects. En concreto, la excepción se produce en las siguientes condiciones:In particular, the exception is thrown under the following conditions:

  • Una versión anterior de una utilidad de .NET Framework, como ILDasm.exe o installutil.exe, se utiliza con un ensamblado que se desarrolló con una versión posterior de .NET Framework.An earlier version of a .NET Framework utility, such as ILDasm.exe or installutil.exe, is used with an assembly that was developed with a later version of the .NET Framework.

    Para solucionar esta excepción, use la versión de la herramienta que corresponde a la versión de .NET Framework que se usó para desarrollar el ensamblado.To address this exception, use the version of the tool that corresponds to the version of the .NET Framework that was used to develop the assembly. Esto puede requerir la modificación de la Path variable de entorno o proporcionar una ruta de acceso completa al archivo ejecutable correcto.This may require modifying the Path environment variable or providing a fully qualified path to the correct executable.

  • Está intentando cargar una biblioteca de vínculos dinámicos no administrado o ejecutable (por ejemplo, un archivo DLL de sistema de Windows) como si fuese un ensamblado de .NET Framework.You are trying to load an unmanaged dynamic link library or executable (such as a Windows system DLL) as if it were a .NET Framework assembly. El ejemplo siguiente muestra esto utilizando la Assembly.LoadFile método para cargar Kernel32.dll.The following example illustrates this by using the Assembly.LoadFile method to load Kernel32.dll.

    // Windows DLL (non-.NET assembly)
    string filePath = Environment.ExpandEnvironmentVariables("%windir%");
    if (! filePath.Trim().EndsWith(@"\"))
       filePath += @"\";
    filePath += @"System32\Kernel32.dll";
    
    try {
       Assembly assem = Assembly.LoadFile(filePath);
    }
    catch (BadImageFormatException e) {
       Console.WriteLine("Unable to load {0}.", filePath);
       Console.WriteLine(e.Message.Substring(0, 
                         e.Message.IndexOf(".") + 1));   
    }
    // 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.
    
    ' 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.
    

    Para solucionar esta excepción, tener acceso a los métodos definidos en el archivo DLL mediante el uso de las características proporcionadas por el lenguaje de desarrollo, como el Declare instrucción en Visual Basic o DllImportAttribute atributo con el extern palabra clave en C#.To address this exception, access the methods defined in the DLL by using the features provided by your development language, such as the Declare statement in Visual Basic or the DllImportAttribute attribute with the extern keyword in C#.

  • Está intentando cargar un ensamblado de referencia en un contexto distinto del contexto de solo reflexión.You are trying to load a reference assembly in a context other than the reflection-only context. Puede resolver este problema de dos maneras:You can address this issue in either of two ways:

    • Puede cargar el ensamblado de implementación en lugar de con el ensamblado de referencia.You can load the implementation assembly rather than the reference assembly.
    • Puede cargar el ensamblado de referencia en el contexto de solo reflexión mediante una llamada a la Assembly.ReflectionOnlyLoad método.You can load the reference assembly in the reflection-only context by calling the Assembly.ReflectionOnlyLoad method.
  • Se carga un archivo DLL o ejecutable como un ensamblado de 64 bits, pero contiene las características de 32 bits o de recursos.A DLL or executable is loaded as a 64-bit assembly, but it contains 32-bit features or resources. Por ejemplo, se basa en COM interop o llamadas a métodos en una biblioteca de vínculos dinámicos de 32 bits.For example, it relies on COM interop or calls methods in a 32-bit dynamic link library.

    Para solucionar esta excepción, establezca el proyecto destino de la plataforma propiedad x86 (en lugar de x64 o AnyCPU) y vuelva a compilar.To address this exception, set the project's Platform target property to x86 (instead of x64 or AnyCPU) and recompile.

  • Componentes de la aplicación se crearon con distintas versiones de .NET Framework.Your application's components were created using different versions of the .NET Framework. Normalmente, esta excepción se produce cuando una aplicación o componente que se desarrolló con el .NET Framework 1.0.NET Framework 1.0 o .NET Framework 1.1.NET Framework 1.1 intenta cargar un ensamblado que se desarrolló con el .NET Framework 2.0 SP1.NET Framework 2.0 SP1 o posterior, o cuando una aplicación que se desarrolló con el .NET Framework 2.0 SP1.NET Framework 2.0 SP1 o .NET Framework 3,5.NET Framework 3.5 intenta cargar un ensamblado que se desarrolló con el .NET Framework 4.NET Framework 4 o una versión posterior.Typically, this exception occurs when an application or component that was developed using the .NET Framework 1.0.NET Framework 1.0 or the .NET Framework 1.1.NET Framework 1.1 tries to load an assembly that was developed using the .NET Framework 2.0 SP1.NET Framework 2.0 SP1 or later, or when an application that was developed using the .NET Framework 2.0 SP1.NET Framework 2.0 SP1 or .NET Framework 3,5.NET Framework 3.5 tries to load an assembly that was developed using the .NET Framework 4.NET Framework 4 or later. El BadImageFormatException se pueden registrar como un error en tiempo de compilación, o se puede producir la excepción en tiempo de ejecución.The BadImageFormatException may be reported as a compile-time error, or the exception may be thrown at run time. En el ejemplo siguiente se define un StringLib clase que tiene un solo miembro, ToProperCase, y que reside en un ensamblado denominado StringLib.dll.The following example defines a StringLib class that has a single member, ToProperCase, and that resides in an assembly named StringLib.dll.

    using System;
    
    public class StringLib
    {
       private string[] exceptionList = { "a", "an", "the", "in", "on", "of" };
       private char[] separators = { ' ' };
       
       public string ToProperCase(string title)
       {
          bool isException = false;	
          
          string[] words = title.Split( separators, StringSplitOptions.RemoveEmptyEntries);
          string[] newWords = new string[words.Length];
    		
          for (int ctr = 0; ctr <= words.Length - 1; ctr++)
          {
             isException = false;
    
             foreach (string exception in exceptionList)
             {
                if (words[ctr].Equals(exception) && ctr > 0)
                {
                   isException = true;
                   break;
                }
             }
             
             if (! isException)
                newWords[ctr] = words[ctr].Substring(0, 1).ToUpper() + words[ctr].Substring(1);
             else
                newWords[ctr] = words[ctr];	 
          }	
          return String.Join(" ", newWords); 			
       }
    }
    // Attempting to load the StringLib.dll assembly produces the following output:
    //    Unhandled Exception: System.BadImageFormatException: 
    //                         The format of the file 'StringLib.dll' is invalid.
    
    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
    

    El ejemplo siguiente usa la reflexión para cargar un ensamblado denominado StringLib.dll.The following example uses reflection to load an assembly named StringLib.dll. Si el código fuente se compila con un .NET Framework 1.1.NET Framework 1.1 compilador, un BadImageFormatException produce el Assembly.LoadFrom método.If the source code is compiled with a .NET Framework 1.1.NET Framework 1.1 compiler, a BadImageFormatException is thrown by the Assembly.LoadFrom method.

    using System;
    using System.Reflection;
    
    public class Example
    {
       public static void Main()
       {
          string title = "a tale of two cities";
    //      object[] args = { title}
          // Load assembly containing StateInfo type.
          Assembly assem = Assembly.LoadFrom(@".\StringLib.dll");
          // Get type representing StateInfo class.
          Type stateInfoType = assem.GetType("StringLib");
          // Get Display method.
          MethodInfo mi = stateInfoType.GetMethod("ToProperCase");
          // Call the Display method. 
          string properTitle = (string) mi.Invoke(null, new object[] { title } );
          Console.WriteLine(properTitle);
       }
    }
    
    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.
    

    Para solucionar esta excepción, asegúrese de que el ensamblado cuyo código se está ejecutando y que produce la excepción y el ensamblado que va a cargar ambas versiones compatibles de .NET Framework de destino.To address this exception, make sure that the assembly whose code is executing and that throws the exception, and the assembly to be loaded both target compatible versions of the .NET Framework.

  • Los componentes de la aplicación de distintas plataformas de destino.The components of your application target different platforms. Por ejemplo, está intentando cargar ensamblados ARM en un x86 aplicación.For example, you are trying to load ARM assemblies in an x86 application. Puede usar la utilidad de línea de comandos siguiente para determinar las plataformas de destino de los ensamblados de .NET Framework individuales.You can use the following command-line utility to determine the target platforms of individual .NET Framework assemblies. La lista de archivos debe proporcionarse como una lista delimitada por espacios en la línea de comandos.The list of files should be provided as a space-delimited list at the command line.

    using System;
    using System.IO;
    using System.Reflection;
    
    public class Example
    {
       public static void Main()
       {
          String[] args = Environment.GetCommandLineArgs();
          if (args.Length == 1) {
             Console.WriteLine("\nSyntax:   PlatformInfo <filename>\n");
             return;
          }
          Console.WriteLine();
    
          // Loop through files and display information about their platform.
          for (int ctr = 1; ctr < args.Length; ctr++) {
             string fn = args[ctr];
             if (! File.Exists(fn)) {
                Console.WriteLine("File: {0}", fn);
                Console.WriteLine("The file does not exist.\n");
             }
             else {
                try {
                   AssemblyName an = AssemblyName.GetAssemblyName(fn);
                   Console.WriteLine("Assembly: {0}", an.Name);
                   if (an.ProcessorArchitecture == ProcessorArchitecture.MSIL)
                      Console.WriteLine("Architecture: AnyCPU");
                   else
                      Console.WriteLine("Architecture: {0}", an.ProcessorArchitecture);
    
                   Console.WriteLine();
                }
                catch (BadImageFormatException) {
                   Console.WriteLine("File: {0}", fn);
                   Console.WriteLine("Not a valid assembly.\n");
                }
             }
          }
       }
    }
    
    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
    
  • Esta excepción se puede producir al reflejar en archivos ejecutables de C++.Reflecting on C++ executable files may throw this exception. Lo más probable es que se deba a que el compilador de C++ ha eliminado las direcciones de reubicación o la sección .Reloc del archivo ejecutable.This is most likely caused by the C++ compiler stripping the relocation addresses or the .Reloc section from the executable file. Para conservar la dirección de reubicación en un archivo ejecutable de C++, especifique / fixed: no al vincular.To preserve the .relocation address in a C++ executable file, specify /fixed:no when linking.

BadImageFormatException utiliza HRESULT COR_E_BADIMAGEFORMAT, que tiene el valor 0x8007000B.BadImageFormatException uses the HRESULT COR_E_BADIMAGEFORMAT, which has the value 0x8007000B.

Para obtener una lista de valores de propiedad iniciales de una instancia de BadImageFormatException, consulte el BadImageFormatException constructores.For a list of initial property values for an instance of BadImageFormatException, see the BadImageFormatException constructors.

Constructores

BadImageFormatException() BadImageFormatException() BadImageFormatException() BadImageFormatException()

Inicializa una nueva instancia de la clase BadImageFormatException.Initializes a new instance of the BadImageFormatException class.

BadImageFormatException(SerializationInfo, StreamingContext) BadImageFormatException(SerializationInfo, StreamingContext) BadImageFormatException(SerializationInfo, StreamingContext) BadImageFormatException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase BadImageFormatException con datos serializados.Initializes a new instance of the BadImageFormatException class with serialized data.

BadImageFormatException(String) BadImageFormatException(String) BadImageFormatException(String) BadImageFormatException(String)

Inicializa una nueva instancia de la clase BadImageFormatException con el mensaje de error especificado.Initializes a new instance of the BadImageFormatException class with a specified error message.

BadImageFormatException(String, Exception) BadImageFormatException(String, Exception) BadImageFormatException(String, Exception) BadImageFormatException(String, Exception)

Inicializa una nueva instancia de la clase BadImageFormatException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.Initializes a new instance of the BadImageFormatException class with a specified error message and a reference to the inner exception that is the cause of this exception.

BadImageFormatException(String, String) BadImageFormatException(String, String) BadImageFormatException(String, String) BadImageFormatException(String, String)

Inicializa una nueva instancia de la clase BadImageFormatException con el mensaje de error y el nombre de archivo especificados.Initializes a new instance of the BadImageFormatException class with a specified error message and file name.

BadImageFormatException(String, String, Exception) BadImageFormatException(String, String, Exception) BadImageFormatException(String, String, Exception) BadImageFormatException(String, String, Exception)

Inicializa una nueva instancia de la clase BadImageFormatException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.Initializes a new instance of the BadImageFormatException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Propiedades

Data Data Data Data

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
FileName FileName FileName FileName

Obtiene el nombre del archivo que causa esta excepción.Gets the name of the file that causes this exception.

FusionLog FusionLog FusionLog FusionLog

Obtiene el archivo de registro que describe el motivo por el que no se pudo cargar un ensamblado.Gets the log file that describes why an assembly load failed.

HelpLink HelpLink HelpLink HelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Obtiene la instancia Exception que produjo la excepción actual.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Obtiene el mensaje de error y el nombre del archivo que causó esta excepción.Gets the error message and the name of the file that caused this exception.

Source Source Source Source

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Obtiene el método que produjo la excepción actual.Gets the method that throws the current exception.

(Inherited from Exception)

Métodos

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Sirve como la función hash predeterminada.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Establece el objeto SerializationInfo con el nombre del archivo, el registro de la caché de ensamblados y la información adicional de la excepción.Sets the SerializationInfo object with the file name, assembly cache log, and additional exception information.

GetType() GetType() GetType() GetType()

Obtiene el tipo en tiempo de ejecución de la instancia actual.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficial del Object actual.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Devuelve el nombre completo de esta excepción y, posiblemente, el mensaje de error, el nombre de la excepción interna y el seguimiento de la pila.Returns the fully qualified name of this exception and possibly the error message, the name of the inner exception, and the stack trace.

Eventos

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Se aplica a

Consulte también: