Mscorlib ne contient le code géré et natif.
Parmi d'autres choses, il contient le Système.Implémentation de l'objet, qui doit toujours être présente dans l'ordre pour que tout fonctionne.
Il a la distinction d'être la seule assemblée que le CLR, qui nécessite d'être chargé à l'intérieur de chaque processus de gestion.
À l'origine, beaucoup de "facultatif" trucs (des choses qui, techniquement, ne sont pas requis pour exécuter une application) a été mis en mscorlib parce qu'ils étaient des choses qui étaient très susceptibles d'être utilisés par tout le monde. Cela inclut des choses comme la table de hachage et de la Liste.
Cela a donné une perf coup de pouce. Si tout le monde va vouloir utiliser quelque chose, alors il est logique de le mettre à l'intérieur de l'assemblée pour que tout le monde a à charge. Ensuite, vous n'avez pas perdre de temps à aller et la reliure d'un tas de différents assemblages.
Les trucs en system.dll était fondamentalement tout ce qui n'était pas "digne" d'être inclus dans mscorlib.
Toutefois, cette tendance est en train de s'inverser. Le CLR est de faire des efforts pour réduire la taille de mscorlib. Beaucoup de choses ont été supprimés pour Silverlight par exemple (pour réduire la taille de téléchargement).
Je pense qu'ils pourraient faire de plus de ce genre de choses pour les V4 (et versions ultérieures), mais je ne suis pas sûr de connaître les détails.