2010-09-15 21 views
9

¿Alguien sabe cómo hacer una costumbre BCL trabajar con la acción CLR? ¿Cómo descubrir los lazos más esenciales entre CLR y BCL y reutilizarlos?¿Cómo crear una biblioteca personalizada de clases de .NET (BCL) aka mscorlib replacement?

Esto es lo que tengo hasta ahora: http://lightnet.codeplex.com

+1

¿Por qué quiere hacer eso? Si desea una implementación alternativa, puede consultar Mono. –

+0

Mono no es una opción. Quiero mi propia implementación liviana :) Hay muchos escenarios en los que dicho marco podría ser un ajuste ideal. Por ejemplo, cuando necesite crear una plataforma de desarrollo personalizada cuya arquitectura difiera demasiado de la implementación de Microsoft .NET. –

+0

¿Qué pasa con el marco compacto? –

Respuesta

5

Teniendo en cuenta los comentarios, parece que desea utilizar el CLR acción con un BCL personalizado.

I altamente duda de que eso funcione. Es probable que CLR y BCL tengan bastantes vínculos entre ellos: harán ciertas expectativas de implementación, y confiarán en ellas, no irrazonablemente. Por ejemplo, el CLR puede depender de ciertos tipos internos de los que no sabría nada.

estaría bastante sorprendido si se las arregló para conseguir el CLR de trabajar con su propia implementación BCL, aunque probablemente sería mucho más sencilla de implementar un BCL personalizada para trabajar con el tiempo de ejecución Mono - al menos no puede depurar qué está pasando si te encuentras con problemas.

+0

+1: Trataré de resolver los vínculos más importantes por un tiempo. Sé que algunos chicos pueden hacer eso, lo que me hace sentir que es un problema que se puede resolver. –

+0

@Koistya: Un problema es que incluso si * puedes * resolverlo, es posible que termines roto por una revisión o una nueva versión de CLR. –

+0

Solo estoy pensando ... hay un argumento compilador/nostdlib ¿Por qué Microsoft lo expondría aparte de la posibilidad de escribir BCL personalizados y compilarlo contra CLR nativo ... –

0

Incluso si pudieras escribir tu propio BCL, ¿cómo conseguirías otro código para usarlo? Todo dicho código está construido contra el BCL real y espera los nombres fuertes utilizados en los ensamblados de BCL.

+0

Idealmente no habrá ningún otro código. Todo el código se compilará alrededor de este BCL personalizado. –

+0

Entonces, ¿no usará ninguna otra parte de .NET? Depende del BCL. –

+0

Usaría otras partes de .net para la depuración de pruebas solo en este momento. Para hacerlo, estoy intentando compilar un ensamblado que utiliza un BCL personalizado con el indicador '/ reference: MyBCL = System' http://msdn.microsoft.com/en-us/library/yabyz3h4.aspx –

6
  • Salida Script#, un conjunto de herramientas para la elaboración de C# para Javascript que fue escrito por alguien que trabaja en Microsoft y se utiliza internamente para algunas de sus aplicaciones web. El chico lo hace compilando con/nostdlib y haciendo referencia a su BCL mínimamente reimplementado. Después de que se produce un ensamblaje, una herramienta se refleja a través de él y lo convierte en Javascript. Utiliza el BCL reimplementado para permitir la depuración precisa y evitar que utilice características del BCL que no tienen sentido en un contexto de Javascript. Se ve sorprendentemente como lo hace su código ahora, incluido el hecho de que la mayoría de las clases están vacías o solo tienen algunos métodos vacíos. Esto se debe a que la implementación de las clases/métodos de BCL están en Javascript, en su lugar.

  • Esto podría ser un campo de minas patente. Aprendí esto con el reciente juicio de Oracle: solo está cubierto por la promesa de la comunidad si implementa el BCL según las especificaciones (aunque, a diferencia de Java, no tiene que implementar el CLR junto a él. Sí, la exención de patentes de Microsoft es más liberal que Java). Creo que esta es una idea fantástica que podría ser útil en muchas situaciones; Puedo imaginarme usando esto en lugar de una DSL, o en lugar de incrustar un lenguaje de scripting, o en lugar de preocuparme pedantemente por la seguridad del código en mi arquitectura de plugins. Pero piénselo desde la perspectiva de Microsoft: si permiten las exenciones de patentes para los BCL no conformes, ¿qué impide que alguien llame a su producto patentado como una "implementación de BCL no conforme" y obtenga las exenciones?

+0

Buenos puntos. Gracias por el aporte. –

1

espero que esto no es un hilo antigua estoy cavando, pero no veo un año; asumiendo que es de hace un mes o dos (alrededor de septiembre de 2010) ...

De todos modos, esto me suena inútil más allá de fines académicos y simplemente de diversión/aprendizaje. Y sospecho que va a fallar a menos que use un descompilador para ver cómo es la interfaz interna del BCL y asegúrese de que su implementación cumpla con lo que espera el CLR predeterminado; alternativamente, consulte la implementación de Mono.

Creo que es inútil para propósitos prácticos porque .NET BCL de Microsoft es una implementación extremadamente robusta, y dudo que un hombre o un equipo pequeño pueda hacerlo mejor. ¿Necesita peso ligero? Eso es lo que el.El tiempo de ejecución de NET CE es para, y funciona bien en dispositivos pequeños. Alguien también mencionó .NET MF (Micro Framework); y ese es un MF'er liviano si el nombre lo hace justicia. :)

La única manera que veo un uso práctico para esto sería si totalmente re-aplicar los CLR/CLI/CLS (y así, "CL-todo") usted mismo y crea su propia aplicación .NET para alguna otra plataforma.

EDITAR: Tenga en cuenta que si utiliza cualquier otra parte de .NET, se utiliza el BCL estándar; por lo que no te habrás librado de él y aún será necesario. Lo malo es si está intentando ejecutar esto en una plataforma donde la implementación .NET estándar no existe, pero no creo que eso sea lo que está haciendo ...

+0

+1: Buena entrada, gracias por el comentario. –

Cuestiones relacionadas