문제

왜 MS 원래 결정을 유지하는 이러한 두 가지 별도의 핵심 라이브러리?어쩌면 그들은 어떤 확장성 문제에서 마음,하지만 요즘 제가 보지 못하는 응용 프로그램,모든 유형의 필요하지 않습니다 모두.누군가가 어떤 내부 정보 이?그것은 정말 중요하지 않다,하지만 내 마음니다.

PS.내가 무엇을 알고 두 libs,나는 그 차이를 알-나는 큰 팬의 반사체 :)는 실용적인 사용하여 두 개의 분리가있다.

도움이 되었습니까?

해결책

mscorlib에는 기본 및 관리 코드가 모두 포함되어 있습니다.

무엇보다도 System.object 구현이 포함되어 있으며 모든 것이 작동하기 위해 항상 존재해야합니다.

CLR이 모든 관리 프로세스 내부에로드되어야하는 유일한 어셈블리라는 구별이 있습니다.

원래, 많은 "선택적"물건 (기술적으로 앱을 실행할 필요가없는 것들)이 모든 사람이 사용할 가능성이 높기 때문에 mscorlib에 넣었습니다. 여기에는 Hashtable 및 List와 같은 것들이 포함됩니다.

이것은 완벽한 부스트를 주었다. 모든 사람이 무언가를 사용하고 싶다면 모든 사람이로드 해야하는 어셈블리 내부에 넣는 것이 합리적입니다. 그런 다음 여러 다른 어셈블리를 묶고 묶는 데 시간을 낭비 할 필요가 없습니다.

System.dll의 재료는 기본적으로 mscorlib에 포함 된 "가치가없는"모든 것이 었습니다.

그러나 이러한 추세는 역전되기 시작했습니다. CLR은 mscorlib의 크기를 줄이기 위해 노력하고 있습니다. 예를 들어 Silverlight에 대한 많은 것들이 제거되었습니다 (다운로드 크기를 줄이기 위해).

나는 그들이 v4 (그리고 이후 버전)를 위해 이런 종류의 일을 더 많이하고 있다고 생각하지만 세부 사항에 대해서는 확실하지 않습니다.

다른 팁

나는 작업에 CLR/BCL 팀고 대답했습니다.그것은 여기를 붙여 아래:

제라드의 대답에서 스 버 오른쪽에있다.mscorlib.dll 단 바 CLR 이유에 대해 그 언급하고있다.Note mscorlib.dll 자체가 포함되어 있지 않은 기본 코드 (으로 스콧에서 알 수 있듯이),하지만 거기에 많은 장소가 호출하는 데 필요 으로 직접 CLR.이와 같이, CLR 및 mscorlib 버전이 관리되어야 합 다.

System.dll 에 다른 손은 아 단단히 묶 CLR(지 필요한 모든 통화로 런타임).우리는 고려 System.dll 에 높은 층보 mscorlib.dll.이러한 두 가지 어셈블리 별도의 층 수상 유연성,쉽게 만들기 버 System.dll 에서 별도로 CLR/mscorlib.dll 버전(는 경우리 그렇게).리,이론,확인 의 변화와 기능을 추가 시스템입니다.dll 없이 속도를 올리 CLR/mscorlib 버전입니다.분리 또한 쉽게 관리 종속성 규칙 사이에서 부품 이러한 다양한 레이어입니다.

으로 스콧 언급한,그것이처럼 보일 많은"선택"재료에 mscorlib.이것은 주로 역사적인 이유 때문에 일부 것은 그에 필요한 다른 것이다.예를 들어,거기 기술는 이유 시스템입니다.IO.IsolatedStorage 야 에 mscorlib,하지만 그것이 단지 일에 추가 1.0,리 생각해보 등 버전/레이어링 문제입니다.또한, 목록에서 mscorlib 기 때문에 다른 코드에서 mscorlib 가를 위한 필요 기본 목록 컬렉션입니다.

장기고 싶습을 줄일 량의"선택"재료에 mscorlib 으로 많이 가능합니다.나 밀어 물건의 mscorlib 나 새로 만드,더 많은 핵심,어셈블리 을 포함하는 최소한 필요한 모형(예를들면시스템입니다.체 시스템입니다.Int32,etc.) 하게 관리 코드 작동합니다.이렇게 우리에게 유연성을 추가하는 새로운 혁신 "선택"재료 및 그 를 만들기 위해 쉽게 다릅니다.NET Framework Sku(예:니다.NET 클라이언트 프로필,Silverlight etc..), 없 하 rev 런타임입니다.

이 도움이 되었으면 좋겠습니다!

감사합니다, Justin

Scott의 답변에 대한 확장.

주어진 버전의 CLR은 특정 버전의 mscorlib.dll에 고도로 연결되어 있습니다. 이것은 특별한 매우 여러 가지 방법으로 DLL. CLR 런타임은 특정 유형/메소드를 사용할 수 있어야하며 실제 코드베이스에 정의 된 많은 방법을 구현합니다. 이 관계를 관리하는 복잡성은 CLR 버전과 mscorlib 버전 사이에 깨지지 않는 링크를 통해 감소합니다.

프로젝트의 참조 노드를 잘 살펴보십시오. 당신은 거기에 나열된 mscorlib.dll을 찾을 수 없습니다. 언어 구문을 만들기 위해 필요한 유형이 포함되어 있기 때문에 모든 컴파일러에는 특별합니다. System.Array, System.INT32, System.String, System.Exception 등

System.dll에 의존하지 않는 프로그램을 쓸 수 있지만 (어렵지만) mscorlib.dll에 의존하지 않는 것을 쓸 수는 없습니다.

언급 된 기본/관리자는 그럴듯하게 들리지만 여전히 완전히 확신하지는 않습니다. 어쨌든 MS는 mscorlib.dll을 체계, System.dll은 핵심 기능을 포함합니다 프로그래머 - 또한 좋은 것 같습니다.

방금이 같은 질문을 BCL 팀에 이메일로 보냈습니다. 만약에 누구나 대답 할 수 있습니다 ... 언제 (if?) 답을 받으면 여기에 게시하겠습니다. 지금까지 답변 해 주셔서 감사합니다!

이것은 단지 추측 일 뿐이지 만 mscorlib.dll은 아마도 CLR 런타임에 중요한 C 코드와 .NET 어셈블리 또는 혼합 모드 코드 일 것입니다. System.dll은 아마도 모두 관리되었을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top