mscorlib.dll & Sistema.DLL


¿Por qué MS tomó originalmente la decisión de mantener estas dos bibliotecas centrales separadas? Tal vez tenían algún problema de escalabilidad en mente, pero hoy en día nunca veo una aplicación, de ningún tipo, que no necesite ambas cosas. ¿Alguien tiene información privilegiada sobre esto? No es realmente importante, pero he estado en mi mente durante años.

PS. Sé lo que hay en las dos libs, sé la diferencia-Soy un gran fan de Reflector :) Solo me pregunto qué uso práctico tiene la separación de los dos tener.

Author: starblue, 2008-12-31

6 answers

Mscorlib contiene tanto código nativo como administrado.

Entre otras cosas contiene el Sistema.Implementación de objetos, que siempre debe estar presente para que todo funcione.

Tiene la distinción de ser el único ensamblado que el CLR requiere que se cargue dentro de cada proceso administrado.

Originalmente, muchas cosas" opcionales " (cosas que técnicamente no son necesarias para ejecutar una aplicación) se pusieron en mscorlib porque eran cosas que muy probable que sea utilizado por todo el mundo. Esto incluye cosas como HashTable y List.

Esto dio un impulso perf. Si todo el mundo va a querer usar algo, entonces tiene sentido ponerlo dentro del ensamblaje que todo el mundo tiene que cargar. Entonces no tienes que perder el tiempo yendo y atando un montón de ensamblajes diferentes.

Las cosas en el sistema.dll era básicamente todo lo que no era "digno" de ser incluido en mscorlib.

Esta tendencia, sin embargo, está empezando a ser invertir. El CLR está haciendo esfuerzos para reducir el tamaño del mscorlib. Se eliminaron muchas cosas para Silverlight, por ejemplo (para reducir el tamaño de la descarga).

Creo que podrían estar haciendo más de este tipo de cosas para V4 (y versiones posteriores), pero no estoy seguro de los detalles.

 39
Author: Scott Wisniewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-30 05:26:21

Trabajo en el equipo de CLR/BCL y acabo de responder tu correo electrónico. Aquí se pega a continuación:

La respuesta de Jared en Stack Overflow es muy bien. mscorlib.dll es apretado vinculado al CLR por las razones que mencionar. Tenga en cuenta que mscorlib.DLL no contiene ningún código nativo (como Scott sugiere), pero hay muchos lugares donde necesita llamar directamente en el CLR. Como tal, el CLR y mscorlib deben ser versionados junto.

Sistema.dll en el otro la mano no es fuertemente atado al CLR (no lo hace require any calls into the runtime). Consideramos el Sistema.dll para estar en un capa más alta que mscorlib.DLL. Tener estas asambleas en dos capas separadas permite más flexibilidad, por lo que es más fácil sistema de versiones.dll por separado de la CLR / mscorlib.versión dll (si quisiéramos haciéndolo). Podríamos, en teoría, hacer cambios y añadir funcionalidad a Sistema.dll sin acelerar el Versión CLR / mscorlib. Separación también hace que sea más fácil de administrar reglas de dependencia entre componentes en estas diferentes capas.

Como Scott menciona, parece que hay un montón de cosas "opcionales" en mscorlib. Esto es principalmente para razones históricas y porque algunos las cosas solo son necesarias por otros cosa. Por ejemplo, no hay razones técnicas System. IO. IsolatedStorage necesita ser en mscorlib, pero ahí es donde pasó a ser añadido en 1.0, antes de que realmente pensé en tales preocupaciones de versionado / estratificación. También, Lista está en mscorlib porque otros código en mscorlib tiene una necesidad de un colección de listas básicas.

A largo plazo nos gustaría reducir el cantidad de cosas" opcionales " en mscorlib tanto como sea posible. Ya sea por empujando cosas fuera de mscorlib o creación de un nuevo, más núcleo, asamblea que solo contiene el mínimo tipos necesarios (por ejemplo, Sistema.Objeto, System. Int32, etc.) para hacer gestionado código de trabajo. Esto nos dará la flexibilidad para añadir nuevas innovaciones a las cosas" opcionales", y lo hacen más fácil de crear diferentes. NET SKU de framework (por ejemplo, el Cliente. NET Perfil, Silverlight, etc.), sin tener que acelerar el tiempo de ejecución.

Espero que esto ayude!

Gracias, Justin

 67
Author: Justin Van Patten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-01 00:03:42

Ampliando la respuesta de Scott.

Cualquier versión dada del CLR está muy ligada a una versión particular de mscorlib.DLL. Es una DLL especial de muchas maneras. El tiempo de ejecución de CLR requiere que ciertos tipos / métodos estén disponibles e implementa muchos métodos definidos en la base de código real. La complejidad de manejar esta relación se reduce al tener un vínculo irrompible entre una versión de CLR y la versión de mscorlib.

 16
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-31 14:45:48

Eche un buen vistazo al nodo de referencias de cualquier proyecto. Nunca encontrarás a Mscorlib.dll listado allí. Es especial, cualquier compilador lo necesita porque contiene tipos que son necesarios para que la sintaxis del lenguaje funcione. Sistema.Array, Sistema. Int32, Sistema.Cadena, Sistema.Excepción, etc.

Puede escribir un programa que no tenga una dependencia del Sistema.dll (aunque sería difícil) pero no puedes escribir uno que no dependa de mscorlib.dll

 6
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-31 10:29:32

La mencionada cosa nativa/administrada suena plausible, pero todavía no estoy del todo convencido. En cualquier caso, MS parece ver mscorlib.dll como el núcleo lib necesario para el sistema , while System.dll contiene la funcionalidad principal para programadores - que también suena bien.

Acabo de enviar esta misma pregunta al equipo de BCL. Si alguien puede responder... ¿Cuándo (si?) Recibo una respuesta, la publicaré aquí. Gracias por las respuestas hasta ahora!

 1
Author: user39603,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-31 14:27:09

Esto es solo una suposición, pero mscorlib.dll probablemente también tiene algún código C que es importante para el tiempo de ejecución de CLR, además de ser un ensamblado.NET, o algún código de modo mixto. Sistema.dll es probablemente todo gestionado.

 0
Author: Paul Betts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-31 10:18:18