다음을 통해 공유


방법: 어셈블리 내용 보기

Ildasm.exe(IL 디스어셈블러)를 사용하여 파일에서 CIL(공용 중간 언어) 정보를 볼 수 있습니다. 검사 중인 파일이 어셈블리인 경우 이 정보에는 어셈블리의 특성과 다른 모듈 및 어셈블리에 대한 참조가 포함될 수 있습니다. 이 정보는 파일이 어셈블리인지 어셈블리의 일부인지, 파일에 다른 모듈 또는 어셈블리에 대한 참조가 있는지 여부를 결정하는 데 유용할 수 있습니다.

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

ildasm Hello.exe

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

예시

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

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 실행하고 IL 디스어셈블러 창에서 매니페스트 아이콘을 두 번 클릭하면 다음과 같은 출력이 생성됩니다.

// 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 <어셈블리 이름> 현재 모듈에서 참조하는 항목을 포함하는 다른 어셈블리를 지정합니다(이 예제 mscorlib에서는).
.publickeytoken <토큰> 참조된 어셈블리의 실제 키 토큰을 지정합니다.
.ver <버전 번호> 참조된 어셈블리의 버전 번호를 지정합니다.
.assembly <어셈블리 이름> 어셈블리 이름을 지정합니다.
.hash 알고리즘 <int32 값> 사용되는 해시 알고리즘을 지정합니다.
.ver <버전 번호> 어셈블리의 버전 번호를 지정합니다.
.module <파일 이름> 어셈블리를 구성하는 모듈의 이름을 지정합니다. 이 예제에서 어셈블리는 하나의 파일로만 구성됩니다.
.subsystem <값> 프로그램에 필요한 애플리케이션 환경을 지정합니다. 이 예제에서 값 3은 이 실행 파일이 콘솔에서 실행되었음을 나타냅니다.
.코플래그 현재 메타데이터의 예약된 필드입니다.

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

참고하십시오