BadImageFormatException BadImageFormatException BadImageFormatException BadImageFormatException Class

Definizione

L'eccezione generata quando l'immagine del file di una libreria di collegamento dinamico (DLL, Dynamic Link Library) o di un programma eseguibile non è valida.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
Ereditarietà
BadImageFormatExceptionBadImageFormatExceptionBadImageFormatExceptionBadImageFormatException
Attributi

Commenti

Questa eccezione viene generata quando il formato di file di una libreria a collegamento dinamico (file con estensione dll) o un file eseguibile (file exe) non è conforme al formato previsto dall'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. In particolare, l'eccezione viene generata nelle condizioni seguenti:In particular, the exception is thrown under the following conditions:

  • Una versione precedente di un'utilità di .NET Framework, ad esempio ILDasm. exe o installutil. exe, viene utilizzata con un assembly sviluppato con una versione successiva del .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.

    Per risolvere questa eccezione, utilizzare la versione dello strumento che corrisponde alla versione del .NET Framework utilizzata per sviluppare l'assembly.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. Potrebbe essere necessario modificare la Path variabile di ambiente o fornire un percorso completo al file eseguibile corretto.This may require modifying the Path environment variable or providing a fully qualified path to the correct executable.

  • Si sta provando a caricare un file eseguibile o una libreria a collegamento dinamico non gestita, ad esempio una DLL di sistema Windows, come se si trattasse di un assembly .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. Nell'esempio seguente viene illustrato l'utilizzo del Assembly.LoadFile metodo per caricare 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.
    

    Per risolvere questa eccezione, accedere ai metodi definiti nella dll usando le funzionalità fornite dal linguaggio di sviluppo, Declare ad esempio l'istruzione in Visual Basic o l' DllImportAttribute attributo con la extern parola chiave in. 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#.

  • Si sta provando a caricare un assembly di riferimento in un contesto diverso dal contesto di sola reflection.You are trying to load a reference assembly in a context other than the reflection-only context. È possibile risolvere questo problema in uno dei due modi seguenti:You can address this issue in either of two ways:

    • È possibile caricare l'assembly di implementazione anziché l'assembly di riferimento.You can load the implementation assembly rather than the reference assembly.
    • È possibile caricare l'assembly di riferimento nel contesto di sola reflection chiamando il Assembly.ReflectionOnlyLoad metodo.You can load the reference assembly in the reflection-only context by calling the Assembly.ReflectionOnlyLoad method.
  • Una DLL o un file eseguibile viene caricato come assembly a 64 bit, ma contiene funzionalità o risorse a 32 bit.A DLL or executable is loaded as a 64-bit assembly, but it contains 32-bit features or resources. Ad esempio, si basa sull'interoperabilità COM o chiama metodi in una libreria a collegamento dinamico a 32 bit.For example, it relies on COM interop or calls methods in a 32-bit dynamic link library.

    Per risolvere questa eccezione, impostare la proprietà piattaforma di destinazione del progetto su x86 (anziché x64 o AnyCPU) e ricompilare.To address this exception, set the project's Platform target property to x86 (instead of x64 or AnyCPU) and recompile.

  • I componenti dell'applicazione sono stati creati usando versioni diverse del .NET Framework.Your application's components were created using different versions of the .NET Framework. In genere, questa eccezione si verifica quando un'applicazione o un componente sviluppato con .NET Framework 1.0.NET Framework 1.0 .NET Framework 1.1.NET Framework 1.1 o tenta di caricare un assembly sviluppato con .NET Framework 2.0 SP1.NET Framework 2.0 SP1 o versioni successive o quando un'applicazione sviluppata con .NET Framework 2.0 SP1.NET Framework 2.0 SP1 in alternativa.NET Framework 3.5.NET Framework 3.5 , tenta di caricare un assembly sviluppato utilizzando .NET Framework 4.NET Framework 4 o versione successiva.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. BadImageFormatException Può essere segnalato come un errore in fase di compilazione oppure l'eccezione può essere generata in fase di esecuzione.The BadImageFormatException may be reported as a compile-time error, or the exception may be thrown at run time. Nell'esempio seguente viene definita StringLib una classe che dispone di un singolo ToProperCasemembro, e che risiede in un assembly denominato 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
    

    Nell'esempio seguente viene utilizzata la reflection per caricare un assembly denominato StringLib. dll.The following example uses reflection to load an assembly named StringLib.dll. Se il codice sorgente viene compilato con un .NET Framework 1.1.NET Framework 1.1 compilatore, viene BadImageFormatException generata un'eccezione dal Assembly.LoadFrom metodo.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.
    

    Per risolvere questa eccezione, assicurarsi che l'assembly il cui codice è in esecuzione e che genera l'eccezione e l'assembly da caricare entrambe le versioni compatibili con la destinazione del .NET Framework.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.

  • I componenti dell'applicazione sono destinati a piattaforme diverse.The components of your application target different platforms. Ad esempio, si sta provando a caricare gli assembly ARM in un'applicazione x86.For example, you are trying to load ARM assemblies in an x86 application. È possibile utilizzare l'utilità da riga di comando seguente per determinare le piattaforme di destinazione di singoli assembly di .NET Framework.You can use the following command-line utility to determine the target platforms of individual .NET Framework assemblies. L'elenco di file deve essere fornito come elenco delimitato da spazi nella riga di comando.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
    
  • Questa eccezione può essere generata dalla reflection su file eseguibili C++.Reflecting on C++ executable files may throw this exception. Nella maggior parte dei casi la causa è la rimozione da parte del compilatore C++ degli indirizzi di rilocazione oppure della sezione .Reloc nel file eseguibile.This is most likely caused by the C++ compiler stripping the relocation addresses or the .Reloc section from the executable file. Per mantenere l'indirizzo di rilocazione in un C++ file eseguibile, specificare/Fixed: No durante il collegamento.To preserve the .relocation address in a C++ executable file, specify /fixed:no when linking.

BadImageFormatExceptionUSA HRESULT COR_E_BADIMAGEFORMAT, che ha il valore 0x8007000B.BadImageFormatException uses the HRESULT COR_E_BADIMAGEFORMAT, which has the value 0x8007000B.

Per un elenco di valori di proprietà iniziali per un'istanza di BadImageFormatException, vedere il BadImageFormatException costruttori.For a list of initial property values for an instance of BadImageFormatException, see the BadImageFormatException constructors.

Costruttori

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

Inizializza una nuova istanza della classe BadImageFormatException.Initializes a new instance of the BadImageFormatException class.

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

Inizializza una nuova istanza della classe BadImageFormatException con dati serializzati.Initializes a new instance of the BadImageFormatException class with serialized data.

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

Inizializza una nuova istanza della classe BadImageFormatException con un messaggio di errore specificato.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)

Inizializza una nuova istanza della classe BadImageFormatException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.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)

Inizializza una nuova istanza della classe BadImageFormatException con il messaggio di errore e il nome del file specificati.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)

Inizializza una nuova istanza della classe BadImageFormatException con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.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.

Proprietà

Data Data Data Data

Ottiene una raccolta di coppie chiave-valore che fornisce informazioni aggiuntive definite dall'utente relative all'eccezione.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
FileName FileName FileName FileName

Ottiene il nome del file che ha causato questa eccezione.Gets the name of the file that causes this exception.

FusionLog FusionLog FusionLog FusionLog

Ottiene il file di log che descrive il motivo dell'errore nel caricamento di un assembly.Gets the log file that describes why an assembly load failed.

HelpLink HelpLink HelpLink HelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Ottiene il messaggio di errore e il nome del file che ha causato questa eccezione.Gets the error message and the name of the file that caused this exception.

Source Source Source Source

Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Ottiene il metodo che genera l'eccezione corrente.Gets the method that throws the current exception.

(Inherited from Exception)

Metodi

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

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

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

Se utilizzato come metodo di override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.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()

Funge da funzione hash predefinita.Serves as the default hash function.

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

Imposta l'oggetto SerializationInfo con il nome del file, il log della cache dell'assembly e le informazioni aggiuntive sull'eccezione.Sets the SerializationInfo object with the file name, assembly cache log, and additional exception information.

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

Ottiene il tipo di runtime dell'istanza corrente.Gets the runtime type of the current instance.

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

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

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

Restituisce il nome completo di questa eccezione ed eventualmente il messaggio di errore, il nome dell'eccezione interna e l'analisi dello stack.Returns the fully qualified name of this exception and possibly the error message, the name of the inner exception, and the stack trace.

Eventi

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Si applica a

Vedi anche