2012-05-04 5 views
1

참조 어셈블리를 이해하려고 시도하고 CLR이 이러한 문제를 어떻게 처리하는지 알기 위해 실제로 실제로 얼마나 많은 .NET CLR이 사용되고 있는지 혼란스러워합니다.CLR의 차이점

API가 winmd 파일로 투영되고 나중에 참조 어셈블리에 의해 .NET에서 처리되는 .NET Metro 프로필을 보면 어떤 버전/종류의 CLR이이를 처리합니까?

Silverlight 프로필과 Windows Phone 프로필에서 사용되는 것과 동일한 메커니즘 인 것 같습니다. 따라서 동일한 CLR이 각각에 대해로드되지만 대상에 따라 관련 API 만 노출됩니다.

의미가 있습니까?

답변

5

데스크톱, 모바일, 전화, X 박스, 실버 라이트, 마이크로 등 모든 플랫폼에 하나씩 있습니다. 그리고 올해 하반기에는 ARM 패드가 추가 될 것입니다. 그러나 중요한 것은 아닙니다. 프로그램은 CLR이 아닌 참조 어셈블리에 맞춰 빌드됩니다. 프로그램에서 호출하는 모든 호출은 프레임 워크 메서드 호출이며 절대 CLR 함수를 직접 호출하지 않습니다.

따라서 프로필, c : \ program files \ reference 어셈블리에 저장된 참조 어셈블리 컬렉션. 그들은 플랫폼 경계를 따라 떨어지지 만 추가적인 변형이 있습니다. 데스크톱 앱처럼 전체, 클라이언트 또는 대도시 프로필을 타겟팅 할 수 있습니다. WinRT 타겟팅을 사용하는 참조 어셈블리의 핵심 기능은 유형을 리디렉션 할 수 있다는 것입니다. 그 마법은 [TypeForwardedTo] attribute에 의해 구현됩니다. 당신이 지하철 프로필에 대한 .NET API를 대상으로 할 때

그래서, 참조 어셈블리는 Framework\.NETCore 하위 디렉토리에서 와서 당신은 의 또 다른 세트에 모든 종류의 리디렉션 mscorlib.dll에서 참조 어셈블리에 대한 참조를해야합니다 WinRT 프로젝션을 구현하는 어셈블리 핵심은 System.Runtime.dll 및 System.Runtime.WindowsRuntime.dll 등입니다. Portable Class Library 기능을 가능하게하는 것과 동일한 메커니즘. 더 자세한 내용 here.

+0

감사합니다. 그래서 참조 어셈블리는 실제로 프로그램을 빌드 할 때만 컴파일 타임에 사용됩니까? 이것의 배후에있는 메커니즘은 타겟 프로파일에 포함되어 있지 않은 함수/타입을 호출하거나 참조하지 않도록합니다. 예 : 실버 라이트? – danielovich

+0

정확히. 그리고 "우연히 유형을 사용하지 말고"런타임에 대 체를 입력하십시오. –

+0

Silverlight의 참조 어셈블리를 살펴보면 mscorlib (예를 들어)는 Metro 또는 Portable 프로필의 mscorlib보다 훨씬 큰 크기입니다. 물론 전체 프레임 워크보다 작습니다. 그러나 Silverlight 프로필과 관련하여 .NET이 현명한 다른 이야기이기 때문에 그렇습니까? – danielovich