9
votes

Comment créer une bibliothèque de classe de base personnalisée (BCL) AKA MSCORLIB Remplacement?

Est-ce que quiconque sait à faire une personnalisation BCL Travailler avec le stock CLR ? Comment découvrir les cravates les plus essentiels existant entre CLR et BCL et les réutiliser?

Voici ce que j'ai jusqu'à présent: http://lightnet.codeplex.com


7 commentaires

Pourquoi voulez-vous faire cela? Si vous souhaitez une mise en œuvre alternative, vous pouvez vérifier mono.


Mono n'est pas une option. Je veux ma propre implémentation légère :) Il existe de nombreux scénarios où un tel cadre pourrait être un ajustement idéal. Par exemple, où vous devez créer une plate-forme de développement personnalisée dont l'architecture diffère trop de la mise en œuvre Microsoft .NET.


Qu'en est-il du cadre compact?


Pouvez-vous mettre en œuvre le CLR aussi?


Après tout, n'est-ce pas amusant de créer une telle bibliothèque, même à des fins éducatives?


@Albin, non, juste une bibliothèque de classe


Voici un scénario du monde réel: imaginez une plate-forme Web qui utilise une certaine API optimisée pour sa architecture. Il existe 2 versions de la bibliothèque de classe avec des API presque identiques, mais des implémentations différentes. On ciblait les ordinateurs clients sur les machines de développeurs et un autre ciblent des serveurs dans un espace informatique en nuage.


4 Réponses :


5
votes

Compte tenu des commentaires, on dirait que vous souhaitez utiliser le stock CLR avec une BCL personnalisée.

i hautement doute que cela fonctionnera. Le CLR et la BCL auront probablement plusieurs liens entre eux - ils feront certaines attentes de la mise en œuvre et dépendront d'eux, pas de manière déraisonnable. Par exemple, le CLR peut s'appuyer sur certains types internes que vous ne sauriez pas.

Je serais raisonnablement surpris si vous avez réussi à obtenir le stock CLR de travailler avec votre propre implémentation de la BCL, bien que cela ne soit probablement plus simple de mettre en œuvre une BCL personnalisée pour travailler avec le mono-runtime - au moins là vous pouvez déboguer ce qui est continuer si vous rencontrez des problèmes.


8 commentaires

+1: Je vais essayer de résoudre les liens les plus importants pendant un moment. Je sais que certains gars sont capables de faire cela qui me fait sentir que c'est un problème solvable.


@Koisya: Un problème est que même si vous peut le résoudre , vous risquez de vous retrouver enfreint par un correctif ou une nouvelle version CLR.


Juste penser. Il y a un argument de compilateur / Nostdlib Pourquoi Microsoft l'exposerait-il autre que la possibilité d'écrire des BCL personnalisés et de le compiler contre la CLR native ...


@Koisistya: Que diriez-vous parce que vous l'utilisez contre un BCL personnalisé et CLR personnalisé?


Si vous utilisez-le contre une BCL personnalisée et une CLR personnalisée, pourquoi il vous limite à utiliser "Espace de noms du système" pour déclarer des types de base ..


@Koisistya: Je n'ai aucune idée de ce que vous voulez dire, j'ai peur. Mais je pense toujours qu'il était très improbable que c'était destiné à ce que vous proposez.


Si vous construisez une BCL personnalisée, vous devez écrire des classes de base à l'aide de «espace de noms du système». Par exemple, si vous créez Core.Object, core.enum au lieu de System.Object, System.Enum Il ne vous laissera tout simplement pas compiler le projet.


@ Koisistya: Eh bien, la spécification linguistique explicitement parle de System.Object, System.Enum et divers autres types, donc je ne suis pas surpris de cela.



0
votes

Même si vous pouviez écrire votre propre BCL, comment obtiendriez-vous un autre code pour l'utiliser? Tout ce code est construit contre le BCL réel et s'attend à ce que les noms puissants utilisés dans les assemblages BCL.


3 commentaires

Idéalement, il n'y aura pas d'autre code. Tout code sera construit autour de ce BCL personnalisé.


Donc, vous n'utiliserez aucune autre partie de .NET? Cela dépend de la BCL.


J'utiliserais d'autres parties de .NET pour des fins de test de débogage uniquement en ce moment. Pour le faire, j'essaie de compiler une assemblée qui utilise une BCl personnalisée avec '/ référence: myBCl = système' system 'drapeau msdn.microsoft.com/en-us/library/yabyz3h4.aspx



6
votes

0 commentaires

1
votes

J'espère que ce n'est pas un ancien fil que je creuse, mais je ne vois pas d'année; En supposant que c'est d'un mois ou deux il y a deux (Vers sept. '10) ...

Quoi qu'il en soit, cela me semble inutile au-delà des objectifs académiques et de s'amuser / apprendre. Et je soupçonnerais que cela va échouer à moins que vous n'utilisiez un décompiler pour voir à quoi ressemble l'interface interne de la BCL et assurez-vous que votre implémentation répond à ce que le CLR par défaut attend; Alternativement, consultez la mise en œuvre mono.

Je pense qu'il est inutile à des fins pratiques car Microsoft .NET BCL est une implémentation extrêmement robuste, et je doute que un homme ou une petite équipe puisse faire mieux. Besoin de léger? C'est ce que le temps d'exécution .NET CE est pour et fonctionne bien sur de petits appareils. Quelqu'un a également mentionné le .NET MF (micro-cadre); et c'est un poids léger MF'er si le nom le fait justice. :)

La seule façon dont je vois une utilisation pratique pour cela serait si vous totalement réémuner le CLR / CLI / CLS (et bien, "cl-tout") vous-même et faites le vôtre. Mise en œuvre nette pour une autre plate-forme.

Edit: Remarque, si vous utilisez une autre partie de .NET, le BCL standard est utilisé par celui-ci; Donc, vous n'aurez pas été débarrassé de cela et il sera toujours nécessaire. Bonne chose si vous essayez de courir ceci sur une plate-forme où la mise en œuvre standard .NET n'existe pas, mais je ne pense pas que c'est ce que vous faites ...


0 commentaires