방법: 어셈블리 내용 보기

Ildasm.exe(IL 디스어셈블러)를 사용하여 파일의 MSIL(Microsoft Intermediate Language) 정보를 볼 수 있습니다. 검사되는 파일이 어셈블리이면 이 정보에 어셈블리의 특성과 다른 모듈 및 어셈블리에 대한 참조가 포함될 수 있습니다. 이 정보는 파일이 어셈블리 또는 어셈블리의 일부인지 여부 및 파일이 다른 모듈 또는 어셈블리에 대한 참조를 포함하는지 여부를 확인하는 데 유용할 수 있습니다.

Ildasm.exe를 사용하여 어셈블리의 콘텐츠를 표시하려면 명령 프롬프트에서 ildasm <어셈블리 이름>을 입력합니다. 예를 들어 다음 명령은 Hello.exe 어셈블리를 디스어셈블합니다.

ildasm Hello.exe

어셈블리 매니페스트 정보를 보려면 MSIL 디스어셈블러 창에서 매니페스트 아이콘을 두 번 클릭합니다.

예시

다음 예제는 기본 "Hello World" 프로그램으로 시작합니다. 프로그램을 컴파일한 후 Ildasm.exe를 사용하여 Hello.exe 어셈블리를 디스어셈블하고 어셈블리 매니페스트를 봅니다.

using namespace System;

class MainApp
{
public:
    static void Main()
    {
        Console::WriteLine("Hello World using C++/CLI!");
    }
};

int main()
{
    MainApp::Main();
}
using System;

class MainApp
{
    public static void Main()
    {
        Console.WriteLine("Hello World using C#!");
    }
}
Class MainApp
    Public Shared Sub Main()
        Console.WriteLine("Hello World using Visual Basic!")
    End Sub
End Class

Hello.exe 어셈블리에서 ildasm.exe 명령을 실행하고 MSIL 디스어셈블러 창에서 매니페스트 아이콘을 두 번 클릭하면 다음과 같은 출력이 생성됩니다.

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly Hello
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module Hello.exe
// MVID: {7C2770DB-1594-438D-BAE5-98764C39CCCA}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00600000

다음 표에서는 예제에 사용된 Hello.exe 어셈블리의 어셈블리 매니페스트에 있는 각 지시문에 대해 설명합니다.

지시문 설명
.assembly extern <assembly name> 현재 모듈에서 참조하는 항목이 포함된 다른 어셈블리를 지정합니다(이 예제에서는 mscorlib).
.publickeytoken <token> 참조된 어셈블리의 실제 키의 토큰을 지정합니다.
.ver <version number> 참조된 어셈블리의 버전 번호를 지정합니다.
.assembly <assembly name> 어셈블리 이름을 지정합니다.
.hash algorithm <int32 value> 사용되는 해시 알고리즘을 지정합니다.
.ver <version number> 어셈블리의 버전 번호를 지정합니다.
.module <file name> 어셈블리를 구성하는 모듈의 이름을 지정합니다. 이 예제에서는 어셈블리가 파일 하나로만 구성됩니다.
.subsystem <value> 프로그램에 필요한 애플리케이션 환경을 지정합니다. 이 예제에서 값 3은 이 실행 파일이 콘솔에서 실행됨을 나타냅니다.
.corflags 현재 메타데이터에서 예약된 필드입니다.

어셈블리 매니페스트에는 어셈블리의 내용에 따라 여러 다른 지시문이 포함될 수 있습니다. 어셈블리 매니페스트에 있는 지시문의 광범위한 목록은 Ecma 설명서의 "파티션 II: 메타데이터 정의 및 의미 체계" 및 "파티션 III: CIL 명령 집합"을 참조하세요.

참고 항목