BadImageFormatException BadImageFormatException BadImageFormatException BadImageFormatException Class

정의

DLL(동적 연결 라이브러리)의 파일 이미지 또는 실행 가능한 프로그램이 유효하지 않을 때 throw되는 예외입니다.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
상속
BadImageFormatExceptionBadImageFormatExceptionBadImageFormatExceptionBadImageFormatException
특성

설명

동적 연결 라이브러리 (.dll 파일) 또는 실행 파일 (.exe 파일)의 파일 형식을 공용 언어 런타임에서 형식에 맞지 않습니다 하는 경우이 예외가 throw 됩니다.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. 특히 다음과 같은 예외가 throw 됩니다.In particular, the exception is thrown under the following conditions:

  • 이전 버전의.NET Framework 유틸리티를 ILDasm.exe 또는 installutil.exe와 같은.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.

    이 예외를 해결 하는 어셈블리를 개발 하는 데 사용 된.NET Framework의 버전에 해당 하는 도구 버전을 사용 합니다.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. 수정이 필요할 수 있습니다는 Path 환경 변수 또는 올바른 실행 파일에 정규화 된 경로 제공 합니다.This may require modifying the Path environment variable or providing a fully qualified path to the correct executable.

  • .NET Framework 어셈블리를 마치는 관리 되지 않는 동적 연결 라이브러리 또는 실행 파일 (예: Windows 시스템 DLL)를 로드 하려고 합니다.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. 다음 예제를 사용 하 여이 설명 합니다 Assembly.LoadFile 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.
    

    이 예외를 해결 하기 위해 액세스와 같은 개발 언어에서 제공 하는 기능을 사용 하 여 DLL에 정의 된 메서드를 Declare Visual Basic의 문 또는 DllImportAttribute 특성과 extern 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#.

  • 리플렉션 전용 컨텍스트 이외의 컨텍스트에 대 한 참조 어셈블리를 로드 하려고 합니다.You are trying to load a reference assembly in a context other than the reflection-only context. 두 가지 방법 중 하나로이 문제를 해결할 수 있습니다.You can address this issue in either of two ways:

    • 참조 어셈블리를 대신 구현 어셈블리를 로드할 수 있습니다.You can load the implementation assembly rather than the reference assembly.
    • 호출 하 여 리플렉션 전용 컨텍스트에서 참조 어셈블리를 로드할 수는 Assembly.ReflectionOnlyLoad 메서드.You can load the reference assembly in the reflection-only context by calling the Assembly.ReflectionOnlyLoad method.
  • DLL 또는 실행 파일을 64 비트 어셈블리로 로드 되었지만 32 비트 기능은 또는 리소스를 포함 합니다.A DLL or executable is loaded as a 64-bit assembly, but it contains 32-bit features or resources. 예를 들어 32 비트 동적 연결 라이브러리에 COM interop 또는 호출 메서드에 의존합니다.For example, it relies on COM interop or calls methods in a 32-bit dynamic link library.

    이 예외를 해결 하려면 프로젝트의 설정 플랫폼 대상 x86 속성 (x64 또는 대신 AnyCPU) 하 고 다시 컴파일해야 합니다.To address this exception, set the project's Platform target property to x86 (instead of x64 or AnyCPU) and recompile.

  • 응용 프로그램의 구성 요소는 다른 버전의.NET Framework를 사용 하 여 생성 되었습니다.Your application's components were created using different versions of the .NET Framework. 응용 프로그램 또는 구성 요소를 사용 하 여 개발 된 경우이 예외가 발생 하는 일반적으로 .NET Framework 1.0.NET Framework 1.0 또는 .NET Framework 1.1.NET Framework 1.1 를 사용 하 여 개발 된 어셈블리를 로드 하려고는 .NET Framework 2.0 SP1.NET Framework 2.0 SP1 또는 이상을 사용 하 여 개발 된 응용 프로그램을 .NET Framework 2.0 SP1.NET Framework 2.0 SP1.NET Framework 3.5.NET Framework 3.5 를 사용 하 여 개발 된 어셈블리를 로드 하려고 합니다 .NET Framework 4.NET Framework 4 이상.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 컴파일 타임 오류로 보고 될 수 있습니다 또는 런타임 시 예외를 throw 될 수 있습니다.The BadImageFormatException may be reported as a compile-time error, or the exception may be thrown at run time. 다음 예제에서는 정의 StringLib 클래스에는 단일 멤버인입니다 ToProperCase, 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
    

    다음 예제에서는 리플렉션을 사용 하 여 StringLib.dll 이라는 어셈블리를 로드 합니다.The following example uses reflection to load an assembly named StringLib.dll. 소스 코드를 사용 하 여 컴파일된 경우는 .NET Framework 1.1.NET Framework 1.1 컴파일러를 BadImageFormatException 에 의해 throw 되는 Assembly.LoadFrom 메서드.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.
    

    이 예외를 해결 하기 위해 해당 코드가 실행 되 고 예외 및 로드 될 어셈블리를 throw 하는 어셈블리를 호환 되는.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.

  • 응용 프로그램의 구성 요소는 다양 한 플랫폼을 대상입니다.The components of your application target different platforms. X86에서 ARM 어셈블리를 로드 하려는 하는 예를 들어, 응용 프로그램입니다.For example, you are trying to load ARM assemblies in an x86 application. 개별.NET Framework 어셈블리의 대상 플랫폼을 확인 하려면 다음 명령줄 유틸리티를 사용할 수 있습니다.You can use the following command-line utility to determine the target platforms of individual .NET Framework assemblies. 파일 목록은 명령줄에서 공백으로 구분 된 목록으로 제공 되어야 합니다.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
    
  • C++ 실행 파일을 반영할 때 이 예외가 throw될 수 있습니다.Reflecting on C++ executable files may throw this exception. 이 예외는 대부분 C++ 컴파일러가 실행 파일에서 .Reloc 섹션이나 재배치 주소를 제거하는 경우에 발생합니다.This is most likely caused by the C++ compiler stripping the relocation addresses or the .Reloc section from the executable file. C + + 실행 파일에서 링크할 주소를 유지 하려면 지정 / 고정: 연결 하는 경우 아니요입니다.To preserve the .relocation address in a C++ executable file, specify /fixed:no when linking.

BadImageFormatException 값 0x8007000B 있는 HRESULT COR_E_BADIMAGEFORMAT를 사용 합니다.BadImageFormatException uses the HRESULT COR_E_BADIMAGEFORMAT, which has the value 0x8007000B.

인스턴스의 초기 속성 값의 목록을 BadImageFormatException, 참조는 BadImageFormatException 생성자입니다.For a list of initial property values for an instance of BadImageFormatException, see the BadImageFormatException constructors.

생성자

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

BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the BadImageFormatException class.

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

serialize된 데이터를 사용하여 BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the BadImageFormatException class with serialized data.

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

지정된 오류 메시지를 사용하여 BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.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)

지정된 오류 메시지와 해당 예외의 원인인 내부 예외에 대한 참조를 사용하여 BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.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)

지정된 오류 메시지와 파일 이름을 사용하여 BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.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)

지정된 오류 메시지와 해당 예외의 원인인 내부 예외에 대한 참조를 사용하여 BadImageFormatException 클래스의 새 인스턴스를 초기화합니다.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.

속성

Data Data Data Data

예외에 대한 사용자 정의 추가 정보를 제공하는 키/값 쌍의 컬렉션을 가져옵니다.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
FileName FileName FileName FileName

이 예외를 발생시킨 파일의 이름을 가져옵니다.Gets the name of the file that causes this exception.

FusionLog FusionLog FusionLog FusionLog

어셈블리 로드에 실패한 이유를 설명하는 로그 파일을 가져옵니다.Gets the log file that describes why an assembly load failed.

HelpLink HelpLink HelpLink HelpLink

이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

오류 메시지와 이 예외를 발생시킨 파일의 이름을 가져옵니다.Gets the error message and the name of the file that caused this exception.

Source Source Source Source

오류를 발생시키는 애플리케이션 또는 개체의 이름을 가져오거나 설정합니다.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

호출 스택의 직접 실행 프레임에 대한 문자열 표현을 가져옵니다.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

현재 예외를 throw하는 메서드를 가져옵니다.Gets the method that throws the current exception.

(Inherited from Exception)

메서드

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

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

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

파생 클래스에서 재정의되었을 때, 하나 이상의 후속 예외의 근본 원인이 되는 Exception을 반환합니다.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()

기본 해시 함수로 작동합니다.Serves as the default hash function.

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

파일 이름, 어셈블리 캐시 로그 및 추가 예외 정보를 사용하여 SerializationInfo 개체를 설정합니다.Sets the SerializationInfo object with the file name, assembly cache log, and additional exception information.

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

현재 인스턴스의 런타임 형식을 가져옵니다.Gets the runtime type of the current instance.

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

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

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

이 예외의 정규화된 이름과 오류 메시지, 내부 예외 이름 및 스택 추적을 반환합니다.Returns the fully qualified name of this exception and possibly the error message, the name of the inner exception, and the stack trace.

이벤트

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

적용 대상

추가 정보