2016-07-04 11 views
2

.NET 기본 도구 체인이 관리되는 .winmd 구성 요소 라이브러리를 자세히 처리하는 방법은 무엇입니까?유니버설 Windows .NET 기본 및 winmd 구성 요소 라이브러리

.NET Native는 DLL의 모든 관리 코드를 하나의 실행 파일로 병합하고 원시 파일로 컴파일 할 때 사용되지 않는 코드를 제거합니다.

그러나 .winmd 관리 라이브러리에 어떤 알고리즘이 사용됩니까? 예를 들어 WinRT의 백그라운드 작업 (예 : 오디오 백그라운드 작업)은 winmd 라이브러리에서 호스팅되며 이러한 작업은 winmd가 제공 한 클래스를 동적으로 호출하는 시스템 제공 기본 프로세스 내에서 호스팅됩니다. .NET 네이티브 개념과 어떻게 호환됩니까?

.NET Native가 관리되는 .winmd 코드를 네이티브로 변환하지 않을 수도 있고 환경이 관리되는 winmd에서 코드를 실행하기 위해 .NET 런타임으로 대체 될 것이므로 원시 컴파일 된 실행 파일의 이점을 포기할 것입니다. 또는 어떻게 작동합니까?

정보를 제공해주십시오. MSDN 설명서에는 관리되는 winmd 구성 요소 라이브러리 및 .NET 네이티브 도구 체인에 대한 자세한 정보가 없습니다.

+1

그것은 단지 메타 데이터에는 모든 .NET 메타 데이터에서 .NET 어셈블리에서 다른.하지 모듈에서 내 보낸 형식을 설명합니다. 그것은 비 관리 코드에서도 작동한다는 점을 제외하면 C++에서도 이러한 백그라운드 작업을 작성할 수 있습니다. 실제로 .winmd의 형식은 .NET 메타 데이터의 형식과 정확히 동일합니다. ildasm.exe와 같은 .NET 디 컴파일러를 사용하여 볼 수 있습니다. 그것에 대해 특별히 신비한 것은 없지만,이 "걱정"은 무의미합니다. –

+0

@HansPassant 제 질문은 .NET 네이티브 툴 체인과 함께 어떻게 작동하는지입니다. –

답변

2

저는 .NET 네이티브 팀에서 일하므로 명확하게 설명 드리겠습니다.

.NET 네이티브는 관리되는 WinMD 어셈블리를 네이티브 코드로 변환하고 응용 프로그램 DLL과 병합합니다 (현재). 백그라운드 작업 프로세스가 관리되는 WinRT 클래스의 네이티브 코드를 찾으려면 응용 프로그램 매니페스트를 수정하여 이제 해당 DLL에 대한 네이티브 코드가있는 응용 프로그램 DLL을 가리 키도록합니다. 작업 백그라운드 프로세스는 기꺼이 응용 프로그램 DLL을로드하고 WinRT 활성화 프로토콜/ABI를 사용하여 응용 프로그램 DLL에 호스트 된 원시 코드로 구현 된 관리되는 WinRT 유형을 활성화합니다. JITting은 필요하지 않습니다.

의심 스럽지만 네이티브 코드에서 활성화 된 WinRT 클래스를 찾는 데 흥미로운 문제가 있습니다. 오늘날 우리는 관리되는 WinMD의 모든 공용 WinRT 클래스를 .NET 원시 컴파일러의 컴파일 루트와 그로부터 도달 할 수있는 모든 것으로 취급합니다. 크기에는 몇 가지 의미가 있지만, JIT를 사용할 수없는 경우와의 상충 관계에 있습니다.

감사합니다, 이순신 장

+0

답변 해 주셔서 감사합니다. 이제 모든 것이 명확합니다. –