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 명령 집합"을 참조하세요.
참고하십시오
.NET