2010-09-15 23 views
9

Est-ce que quelqu'un sait comment faire un BCL de travail personnalisé avec le stock CLR? Comment découvrir les liens les plus essentiels entre CLR et BCL et les réutiliser?Comment créer une bibliothèque de classe de base .NET personnalisée (BCL) aka remplacement mscorlib?

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

+1

Pourquoi voulez-vous faire cela? Si vous voulez une implémentation alternative, vous pouvez consulter Mono. –

+0

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

+0

Qu'en est-il du cadre compact? –

Répondre

5

Compte tenu des commentaires, il semble que vous voulez utiliser le stock CLR avec un BCL personnalisé.

I fortement doute que cela va fonctionner. Le CLR et la BCL sont susceptibles d'avoir un certain nombre de liens les uns avec les autres - ils feront certaines attentes en matière de mise en œuvre, et s'appuieront sur eux, non déraisonnablement. Par exemple, le CLR peut s'appuyer sur certains types internes que vous ne connaissez pas.

Je serais raisonnablement surpris si vous avez réussi à obtenir le stock CLR pour fonctionner avec votre propre implémentation BCL, bien qu'il serait probablement beaucoup plus simple d'implémenter un BCL personnalisé pour fonctionner avec Mono Runtime - au moins, vous pouvez déboguer Que se passe-t-il si vous rencontrez des problèmes?

+0

+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, ce qui me fait penser que c'est un problème résoluble. –

+0

@Koistya: Un problème est que même si vous * pouvez * le résoudre, vous pouvez finir par être cassé par un correctif ou une nouvelle version de CLR. –

+0

Il suffit de penser ... il y a un argument du compilateur/nostdlib Pourquoi Microsoft l'exposerait-il autre que la possibilité d'écrire des BCL personnalisées et de le compiler contre le CLR natif ... –

0

Même si vous pouviez écrire votre propre BCL, comment obtiendriez-vous un autre code pour l'utiliser? Tout ce code est construit par rapport à la BCL réelle, et attend les noms forts utilisés dans les assemblages BCL.

+0

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

+0

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

+0

J'utiliserais d'autres parties de .net à des fins de test de débogage uniquement en ce moment. Pour ce faire, j'essaye de compiler un assembly qui utilise le BCL personnalisé avec l'indicateur '/ reference: MyBCL = System' http://msdn.microsoft.com/en-us/library/yabyz3h4.aspx –

6
  • Découvrez Script#, un ensemble d'outils pour la compilation C# pour Javascript qui a été écrit par quelqu'un qui travaille chez Microsoft et est utilisé en interne pour certains de leurs webapps. Le gars le fait en vous faisant compiler avec/nostdlib et référence son BCL réimplémenté. Après la production d'un assemblage, un outil le reflète et le transforme en Javascript. Il utilise le BCL réimplémenté pour permettre un débogage précis et vous empêcher d'utiliser des fonctionnalités de la BCL qui n'ont pas de sens dans un contexte Javascript. Cela ressemble étrangement à ce que fait votre code maintenant, y compris le fait que la plupart des classes sont elles-mêmes vides ou n'ont que quelques méthodes vides. C'est parce que l'implémentation des classes/méthodes de la BCL est en Javascript.

  • Ceci pourrait être un champ de mines breveté. Je l'ai appris avec le récent procès Oracle: vous n'êtes couvert par la promesse de la communauté que si vous implémentez le BCL à spec (bien que, contrairement à Java, vous n'ayez pas à implémenter le CLR à côté de lui. libéral que Java). Je pense que c'est une idée fantastique qui pourrait être utile dans de nombreuses situations; Je peux m'imaginer utiliser ceci au lieu d'un DSL, ou au lieu d'incorporer un langage de script, ou au lieu de m'inquiéter de la sécurité du code dans mon architecture de plugin. Mais pensez-y du point de vue de Microsoft - s'ils autorisaient des exemptions de brevets pour les BCL non conformes, comment empêcher quelqu'un d'appeler leur produit propriétaire une «implémentation BCL non conforme» et de récolter les exemptions?

+0

Bons points. Merci pour la contribution. –

1

Espérons que ce n'est pas un fil ancien que je déterre, mais je ne vois pas une année; en supposant que cela date d'il y a un mois ou deux (vers septembre 2010) ...

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

Je pense que c'est inutile pour des raisons pratiques, car Microsoft .NET BCL est une implémentation extrêmement robuste, et je doute qu'un homme ou une petite équipe puisse faire mieux. Besoin de légèreté? C'est ce que le.L'environnement d'exécution NET CE est destiné aux petits appareils et fonctionne bien. Quelqu'un a également mentionné le .NET MF (Micro Framework); et c'est un MF'er léger si le nom fait justice. :)

La seule façon que je vois une utilisation pratique car ce serait si vous totalement re-mettre en œuvre le CLR/CLI/CLS (et bien, « CL-tout ») vous et faire votre propre implémentation .NET pour une autre plate-forme.

EDIT: Notez que si vous utilisez une autre partie de .NET, le standard BCL est utilisé par lui; donc vous ne vous en serez pas débarrassé et cela sera toujours nécessaire. Mauvaise chose si vous essayez de l'exécuter sur une plate-forme où l'implémentation .NET standard n'existe pas, mais je ne pense pas que ce soit ce que vous faites ...

+0

+1: Bonne entrée, merci pour le commentaire. –