Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase BadImageFormatException

 

Publicado: octubre de 2016

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.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class BadImageFormatException : SystemException

NombreDescripción
System_CAPS_pubmethodBadImageFormatException()

Inicializa una nueva instancia de la clase BadImageFormatException.

System_CAPS_protmethodBadImageFormatException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase BadImageFormatException con datos serializados.

System_CAPS_pubmethodBadImageFormatException(String)

Inicializa una nueva instancia de la clase BadImageFormatException con el mensaje de error especificado.

System_CAPS_pubmethodBadImageFormatException(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.

System_CAPS_pubmethodBadImageFormatException(String, String)

Inicializa una nueva instancia de la BadImageFormatException clase con un nombre de mensaje y el archivo de error especificado.

System_CAPS_pubmethodBadImageFormatException(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.

NombreDescripción
System_CAPS_pubpropertyData

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.(Heredado de Exception).

System_CAPS_pubpropertyFileName

Obtiene el nombre del archivo que causa esta excepción.

System_CAPS_pubpropertyFusionLog

Obtiene el archivo de registro que describe el motivo por el que no se pudo cargar un ensamblado.

System_CAPS_pubpropertyHelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.(Heredado de Exception).

System_CAPS_pubpropertyHResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.(Heredado de Exception).

System_CAPS_pubpropertyInnerException

Obtiene la instancia Exception que produjo la excepción actual.(Heredado de Exception).

System_CAPS_pubpropertyMessage

Obtiene el mensaje de error y el nombre del archivo que causó esta excepción.(Invalida Exception.Message).

System_CAPS_pubpropertySource

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.(Heredado de Exception).

System_CAPS_pubpropertyStackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.(Heredado de Exception).

System_CAPS_pubpropertyTargetSite

Obtiene el método que produjo la excepción actual.(Heredado de Exception).

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.(Heredado de Exception).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Establece la SerializationInfo objeto con el nombre de archivo, el registro de la caché de ensamblado y la información adicional de la excepción.(Invalida Exception.GetObjectData(SerializationInfo, StreamingContext)).

System_CAPS_pubmethodGetType()

Obtiene el tipo en tiempo de ejecución de la instancia actual.(Heredado de Exception).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

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.(Invalida Exception.ToString()).

NombreDescripción
System_CAPS_proteventSerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.(Heredado de Exception).

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. En concreto, la excepción se produce en las siguientes condiciones:

  • 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.

    Para resolver 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. Esto puede requerir la modificación de la Path variable de entorno o proporcionar una ruta de acceso completa a la aplicación ejecutable correcta.

  • Intenta cargar una biblioteca de vínculos dinámicos no administrado o un ejecutable (por ejemplo, un archivo DLL de sistema de Windows) como si se tratase de un ensamblado de .NET Framework. En el ejemplo siguiente se muestra esto utilizando la Assembly.LoadFile método para cargar 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.
    

    Para resolver 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 atribuir a la extern palabra clave de C#.

  • Un archivo DLL o un ejecutable se carga como un ensamblado de 64 bits, pero contiene características de 32 bits o de recursos. Por ejemplo, se basa en los métodos de interoperabilidad o llamadas de COM en una biblioteca de vínculos dinámicos de 32 bits.

    Para resolver esta excepción, establezca el proyecto destino de la plataforma propiedad x86 (en lugar de x64 o AnyCPU) y vuelva a compilar.

  • Componentes de la aplicación se crearon con distintas versiones de .NET Framework. Normalmente, esta excepción se produce cuando una aplicación o componente que se desarrolló utilizando el .NET Framework 1.0 o .NET Framework 1.1 intenta cargar un ensamblado que se desarrolló utilizando la .NET Framework 2.0 SP1 o posterior, o cuando una aplicación que se desarrolló utilizando la .NET Framework 2.0 SP1 o .NET Framework 3.5 intenta cargar un ensamblado que se desarrolló utilizando el .NET Framework 4 o una versión posterior. El BadImageFormatException se puede notificar como un error en tiempo de compilación, o la excepción puede producirse en tiempo de ejecución. En el ejemplo siguiente se define un StringLib clase que tiene un solo miembro, ToProperCase, y que reside en un ensamblado denominado 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.
    

    En el ejemplo siguiente se utiliza la reflexión para cargar un ensamblado denominado StringLib.dll. Si el código fuente se compila con una .NET Framework 1.1 compilador, un BadImageFormatException producida por la Assembly.LoadFrom método.

    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);
       }
    }
    

    Para resolver 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 cargarlas versiones compatibles de .NET Framework de destino.

  • Distintas plataformas de destino de los componentes de la aplicación. Por ejemplo, está intentando cargar ensamblados ARM en un x86 aplicación. Puede usar la utilidad de línea de comandos siguiente para determinar las plataformas de destino de los ensamblados de .NET Framework individuales. La lista de archivos debe proporcionarse como una lista delimitada por espacios en la línea de comandos.

    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");
                }
             }
          }
       }
    }
    
  • Esta excepción se puede producir al reflejar en archivos ejecutables de C++. 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. Para conservar la dirección de reubicación en un archivo ejecutable de C++, especifique / fixed: no al vincular.

BadImageFormatExceptionutiliza HRESULT COR_E_BADIMAGEFORMAT, que tiene el valor 0x8007000B.

Para obtener una lista de valores de propiedad iniciales para una instancia de BadImageFormatException, consulte el BadImageFormatException constructores.

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: