2015-01-11 6 views
7

GAC (전역 어셈블리 캐시)의 어셈블리가 모두 MSIL으로 빌드되지 않은 이유는 무엇입니까? 나는 다른 사람을 위해 아래의 예와 같이, 일부 어셈블리에 사용 x86AMD64 아키텍처 유형을 볼 수 있지만 : System.Data 두 개의 서로 다른 프로세서 아키텍처에 내장되어 왜GAC의 모든 어셈블리가 MSIL로 빌드되지 않는 이유는 무엇입니까?

C:\Windows\assembly\

enter image description here

System.Core 인 반면, MSIL?

enter image description here

유사한 패턴

C:\Windows\Microsoft.NET\assembly

위에서 도시 GAC 번째 버전에 따라 알 수있다. 어셈블리는 다른 아키텍처로 분할되지만 모두가 32/64 버전에 내장되어있는 것은 아닙니다. 일부는 단지 MSIL입니다.

+1

그들은 컴파일러 최적화 및 아키텍처에 대한 목표를 가지고 있습니다. .NET의 상위 버전의 경우 이러한 최적화가 C# 컴파일러에서 혼합됩니다. – VMAtm

답변

7

라이브러리를 컴파일 할 때 "모든 CPU"또는 특정 프로세서 아키텍처를 대상으로 선택할 수 있습니다.

"모든 CPU"라이브러리는 GAC에서 단일 항목 만 필요하며 전체 어셈블리는 MSIL로 컴파일됩니다.

다른 어셈블리는 각 아키텍처마다 다른 라이브러리가 필요합니다. 이러한 라이브러리는 각 CPU 유형에 대해 작성되며 GAC에는 여러 복사본이 있습니다. 가장 일반적인 이유는 관리되지 않는 코드를 포함하거나 아키텍처에 고유 한 dll을로드하는 것입니다.

예제에서 System.Core는 아마 완벽하게 관리되는 코드이지만 System.Data는 아마도 고유 한 Windows 라이브러리 위에 만들어집니다.

32 비트 모드에서 실행되는 응용 프로그램은 32 비트 버전의 라이브러리를로드하지만 64 비트 모드에서 실행되는 응용 프로그램은 64 비트 버전을로드합니다.

+0

감사합니다. –