.NET은 .NET 프로그램을 완전히 설명하고 포함하는 데 사용되는 이진 파일 형식 어 셈블리를 정의합니다. 어셈블리는 프로그램 자체뿐만 아니라 모든 종속 라이브러리에도 사용됩니다. .NET 프로그램은 적절한 .NET 구현 이외의 다른 필수 아티팩트를 사용하지 않고 하나 이상의 어셈블리로 실행할 수 있습니다. 운영 체제 API를 비롯한 네이티브 종속성은 별도의 문제이며 .NET 어셈블리 형식 내에 포함되지 않지만 이 형식(예: WinRT)으로 설명되기도 합니다.
각 CLI 구성 요소는 해당 구성 요소와 관련된 선언, 구현 및 참조에 대한 메타데이터를 전달합니다. 따라서 구성 요소별 메타데이터를 구성 요소 메타데이터라고 하며, 결과 구성 요소는 ECMA 335 I.9.1, 구성 요소 및 어셈블리에서 자체 설명이라고 합니다.
이 형식은 ECMA 335로 완전히 지정되고 표준화됩니다. 모든 .NET 컴파일러 및 런타임은 이 형식을 사용합니다. 문서화되고 자주 업데이트되지 않는 이진 형식의 존재는 상호 운용성에 대한 주요 이점(틀림없이 요구 사항)이었습니다. 이 형식은 제네릭 및 프로세서 아키텍처를 수용하기 위해 2005년(.NET Framework 2.0)에서 실질적인 방식으로 마지막으로 업데이트되었습니다.
형식은 CPU 및 OS에 구애받지 않습니다. 많은 칩과 CPU를 대상으로 하는 .NET 구현의 일부로 사용되었습니다. 형식 자체에는 Windows 유산이 있지만 모든 운영 체제에서 구현할 수 있습니다. OS 상호 운용성을 위한 가장 중요한 선택은 대부분의 값이 little-endian 형식으로 저장된다는 것입니다. 컴퓨터 포인터 크기에 대한 특정 선호도가 없습니다(예: 32비트, 64비트).
.NET 어셈블리 형식은 지정된 프로그램 또는 라이브러리의 구조에 대해서도 매우 설명적입니다. 어셈블리의 내부 구성 요소, 특히 정의된 어셈블리 참조 및 형식과 해당 내부 구조에 대해 설명합니다. 도구 또는 API는 이 정보를 읽고 처리하여 표시하거나 프로그래밍 방식으로 결정할 수 있습니다.
포맷
.NET 이진 형식은 Windows PE 파일 형식을 기반으로 합니다. 실제로 .NET 클래스 라이브러리는 Windows PE를 준수하며, 언뜻 보기에 Windows DLL(동적 링크 라이브러리) 또는 EXE(애플리케이션 실행 파일)로 표시됩니다. 이는 Windows에서 매우 유용한 특성으로, 네이티브 실행 파일 이진 파일로 가장하고 동일한 처리(예: OS 로드, PE 도구)를 얻을 수 있습니다.
ECMA 335 II.25.1의 어셈블리 헤더, 런타임 파일 형식의 구조입니다.
어셈블리 처리
어셈블리를 처리하는 도구 또는 API를 작성할 수 있습니다. 어셈블리 정보를 사용하면 런타임에 프로그래밍 방식으로 의사 결정을 내리고, 어셈블리를 다시 작성하고, 편집기에서 API IntelliSense를 제공하고, 설명서를 생성할 수 있습니다. System.Reflection, System.Reflection.MetadataLoadContext및 Mono.Cecil 은 이러한 용도로 자주 사용되는 도구의 좋은 예입니다.
.NET