Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe BadImageFormatException

 

Data di pubblicazione: ottobre 2016

Eccezione generata quando l'immagine del file di una libreria di collegamento dinamico (DLL, Dynamic Link Library) o di un programma eseguibile non è valida.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

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

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

NomeDescrizione
System_CAPS_pubmethodBadImageFormatException()

Inizializza una nuova istanza della classe BadImageFormatException.

System_CAPS_protmethodBadImageFormatException(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della classe BadImageFormatException con dati serializzati.

System_CAPS_pubmethodBadImageFormatException(String)

Inizializza una nuova istanza della classe BadImageFormatException con un messaggio di errore specificato.

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

System_CAPS_pubmethodBadImageFormatException(String, String)

Inizializza una nuova istanza di BadImageFormatException classe con un nome di file e messaggi di errore specificato.

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

NomeDescrizione
System_CAPS_pubpropertyData

Ottiene una collezione di coppie chiave/valore che forniscono ulteriori informazioni definite dall'utente sull'eccezione. (Ereditato da Exception.)

System_CAPS_pubpropertyFileName

Ottiene il nome del file che ha causato questa eccezione.

System_CAPS_pubpropertyFusionLog

Ottiene il file di log che descrive il motivo dell'errore nel caricamento di un assembly.

System_CAPS_pubpropertyHelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.(Ereditato da Exception.)

System_CAPS_pubpropertyHResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato ad una specifica eccezione. (Ereditato da Exception.)

System_CAPS_pubpropertyInnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.(Ereditato da Exception.)

System_CAPS_pubpropertyMessage

Ottiene il messaggio di errore e il nome del file che ha causato questa eccezione.(Esegue l'override di Exception.Message.)

System_CAPS_pubpropertySource

Ottiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.(Ereditato da Exception.)

System_CAPS_pubpropertyStackTrace

Ottiene una rappresentazione in forma di stringa dei frame nello stack di chiamate. (Ereditato da Exception.)

System_CAPS_pubpropertyTargetSite

Ottiene il metodo che ha generato l'eccezione corrente. (Ereditato da Exception.)

NomeDescrizione
System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetBaseException()

Quando ne viene eseguito l'override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.(Ereditato da Exception.)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Set di SerializationInfo oggetto con il nome del file di log della cache di assembly e informazioni aggiuntive sull'eccezione.(Esegue l'override di Exception.GetObjectData(SerializationInfo, StreamingContext).)

System_CAPS_pubmethodGetType()

Ottiene il tipo di runtime dell'istanza corrente.(Ereditato da Exception.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodToString()

Restituisce il nome completo di questa eccezione ed eventualmente il messaggio di errore, il nome dell'eccezione interna e l'analisi dello stack.(Esegue l'override di Exception.ToString().)

NomeDescrizione
System_CAPS_proteventSerializeObjectState

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.(Ereditato da Exception.)

Questa eccezione viene generata quando il formato di file di libreria a collegamento dinamico (DLL) o un file eseguibile (file .exe) non sono conformi al formato previsto dal common language runtime. In particolare, l'eccezione viene generata nelle condizioni seguenti:

  • 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 di .NET Framework.

    Per risolvere questa eccezione, utilizzare la versione dello strumento che corrisponde alla versione di .NET Framework utilizzato per sviluppare l'assembly. Tale operazione potrebbe richiedere la modifica di Path variabile di ambiente o se si specifica un percorso completo al file eseguibile corretto.

  • Si tenta di caricare una DLL non gestita o un eseguibile (ad esempio una DLL di sistema Windows), come se fosse un assembly .NET Framework. L'esempio seguente illustra questo tramite il Assembly.LoadFile per caricare Kernel32.

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

    Per risolvere questa eccezione, accedere ai metodi definiti nella DLL usando le funzionalità fornite dal linguaggio di sviluppo, ad esempio il Declare istruzione in Visual Basic o DllImportAttribute attributo con il extern (parola chiave) in c#.

  • Una DLL o un file eseguibile viene caricato come un assembly a 64 bit, ma contiene funzionalità a 32 bit o risorse. Ad esempio, si basa sui metodi di chiamate o l'interoperabilità COM in una libreria a collegamento dinamico a 32 bit.

    Per risolvere questa eccezione, impostare il progetto piattaforma di destinazione proprietà x86 (anziché x64 o AnyCPU) e ricompilare.

  • Componenti dell'applicazione sono stati creati usando versioni diverse di .NET Framework. In genere, questa eccezione si verifica quando un'applicazione o un componente che è stato sviluppato utilizzando il .NET Framework 1.0 o .NET Framework 1.1 tenta di caricare un assembly sviluppato utilizzando il .NET Framework 2.0 SP1 o versione successiva o quando un'applicazione sviluppata tramite il .NET Framework 2.0 SP1 o .NET Framework 3.5 tenta di caricare un assembly sviluppato utilizzando il .NET Framework 4 o versione successiva. Il BadImageFormatException può essere segnalata come un errore in fase di compilazione, oppure l'eccezione venga generata in fase di esecuzione. L'esempio seguente definisce un StringLib classe che dispone di un singolo membro, ToProperCase, e che si trova in un assembly denominato StringLib.

    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.
    

    Nell'esempio seguente usa la reflection per caricare un assembly denominato StringLib. Se il codice sorgente viene compilato con un .NET Framework 1.1 compilatore, un BadImageFormatException viene generata da di Assembly.LoadFrom metodo.

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

    Per risolvere questa eccezione, assicurarsi che l'assembly il cui codice è in esecuzione e che viene generata l'eccezione e l'assembly da caricare sia le versioni compatibili di .NET Framework di destinazione.

  • I componenti dell'applicazione diverse piattaforme di destinazione. Ad esempio, si sta tentando di caricare assembly ARM in x86 dell'applicazione. È possibile utilizzare l'utilità della riga di comando seguente per determinare le piattaforme di destinazione di singoli assembly di .NET Framework. L'elenco di file deve essere fornito come un elenco delimitato da virgole nella riga di comando.

    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");
                }
             }
          }
       }
    }
    
  • Questa eccezione può essere generata dalla reflection su file eseguibili C++. 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. Per mantenere l'indirizzo di rilocazione in un file eseguibile C++, specificare /fixed: no durante il collegamento.

BadImageFormatExceptionutilizza HRESULT COR_E_BADIMAGEFORMAT, con valore 0x8007000B.

Per un elenco di valori di proprietà iniziali per un'istanza di BadImageFormatException, vedere il BadImageFormatException costruttori.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: