2010-09-15 10 views
9

Qualcuno sa come personalizzare un'armatura BCL con lo stock CLR? Come scoprire i legami più essenziali esistenti tra CLR e BCL e riutilizzarli?Come creare una libreria di classi base (BCL) .NET personalizzata o una sostituzione mscorlib?

Ecco quello che ho finora: http://lightnet.codeplex.com

+1

Perché vuoi farlo? Se vuoi un'implementazione alternativa, puoi controllare Mono. –

+0

Mono non è un'opzione. Voglio una mia implementazione leggera :) Ci sono molti scenari in cui tale quadro potrebbe essere l'ideale. Ad esempio, dove è necessario creare una piattaforma di sviluppo personalizzata la cui architettura differisce troppo dall'implementazione di Microsoft .NET. –

+0

E il framework compatto? –

risposta

5

Visti i commenti, suona come si desidera utilizzare il brodo CLR con un BCL personalizzato.

I altamente dubbio che funzionerà. È probabile che CLR e BCL abbiano parecchi legami l'uno con l'altro: faranno alcune aspettative di implementazione e si affideranno a loro, non in modo irragionevole. Ad esempio, il CLR può fare affidamento su determinati tipi interni che non si conoscono.

Sarei abbastanza sorpreso se riuscissi a far funzionare il CLR di magazzino con la tua implementazione BCL, anche se sarebbe probabilmente molto più semplice implementare un BCL personalizzato per lavorare con il runtime Mono - almeno lì puoi eseguire il debug cosa succede se incontri problemi.

+0

+1: proverò a risolvere i legami più importanti per un po '. So che alcuni ragazzi sono in grado di farlo e questo mi fa pensare che sia un problema risolvibile. –

+0

@Koistya: un problema è che anche se * puoi * risolverlo, potresti finire per essere interrotto da un hotfix o da una nuova versione CLR. –

+0

Solo pensando .. c'è un argomento del compilatore/nostdlib Perché Microsoft lo esporrà oltre alla possibilità di scrivere BCL personalizzati e compilarlo contro il CLR nativo ... –

0

Anche se si potesse scrivere il proprio BCL, come si otterrebbe un altro codice per utilizzarlo? Tutto questo codice è costruito rispetto al BCL effettivo e si aspetta i nomi forti utilizzati negli assembly BCL.

+0

Idealmente non ci sarà nessun altro codice. Tutto il codice sarà costruito attorno a questo BCL personalizzato. –

+0

Quindi, non utilizzerai alcuna altra parte di .NET? Dipende dal BCL. –

+0

Vorrei utilizzare altre parti di .net per il debug degli scopi di test solo in questo momento. Per farlo, sto cercando di compilare un assembly che utilizza BCL personalizzato con '/ reference: MyBCL = System' flag http://msdn.microsoft.com/en-us/library/yabyz3h4.aspx –

6
  • Partenza Script#, una toolchain per la compilazione C# per Javascript che è stato scritto da qualcuno che lavora in Microsoft ed è utilizzato internamente per alcuni dei loro webapps. Il ragazzo lo fa facendoti compilare con/nostdlib e fa riferimento al suo BCL minimamente reimplementato. Dopo la creazione di un assieme, uno strumento lo riflette e lo trasforma in Javascript. Usa il BCL reimplementato per abilitare il debug accurato e per impedire all'utente di utilizzare funzionalità del BCL che non hanno senso in un contesto Javascript. Sembra sorprendentemente come il tuo codice ora, incluso il fatto che la maggior parte delle classi sono vuote o hanno solo pochi metodi vuoti. Questo perché l'implementazione delle classi/metodi del BCL sono in Javascript, invece.

  • Questo potrebbe essere un campo minato brevettato. Ho imparato questo con la causa recente di Oracle: sei coperto solo dalla promessa della community se si implementa il BCL alle specifiche (anche se, a differenza di Java, non è necessario implementare il CLR a fianco di esso. Sì, l'esenzione dai brevetti di Microsoft è più liberale di Java). Penso che questa sia un'idea fantastica che potrebbe essere utile in molte situazioni; Posso immaginare di usare questo invece di un DSL, o invece di incorporare un linguaggio di scripting, o invece di preoccuparmi pedanticamente della sicurezza del codice nella mia architettura di plugin. Ma pensateci dal punto di vista di Microsoft, se consentissero esenzioni di brevetto per BCL non conformi, cosa impedirebbe a qualcuno di chiamare il proprio prodotto proprietario "un'implementazione BCL non conforme" e trarne le esenzioni?

+0

Punti buoni. Grazie per l'input. –

1

Spero che questo non sia un filo antico che sto scavando, ma non vedo un anno; supponendo che sia di un mese o due fa (circa settembre '10) ...

In ogni caso, questo mi sembra inutile al di là di scopi accademici e solo di divertimento/apprendimento. E sospetto che fallirà a meno che non si usi un decompilatore per vedere quale sia l'interfaccia interna del BCL e assicurarsi che l'implementazione soddisfi ciò che si aspetta il CLR predefinito; in alternativa, controlla l'implementazione Mono.

Penso che sia inutile per scopi pratici perché .NET BCL di Microsoft è un'implementazione estremamente solida, e dubito che un uomo o un piccolo team possano fare meglio. Hai bisogno di peso leggero? Questo è ciò cheIl runtime di NET CE è adatto e funziona bene su dispositivi di piccole dimensioni. Qualcuno ha anche citato .NET MF (Micro Framework); e questo è un MF'er leggero se il nome lo rende giustizia. :)

L'unico modo che vedo un uso pratico per questo sarebbe se si totalmente ri-attuazione alle CLR/CLI/CLS (e bene, "CL-tutto") da soli e fare una propria implementazione .NET per qualche altra piattaforma.

MODIFICA: Nota, se si utilizza qualsiasi altra parte di .NET, viene utilizzato il BCL standard; quindi non te ne sarai sbarazzato e sarà comunque necessario. Brutta cosa se stai provando ad eseguirlo su una piattaforma dove l'implementazione .NET standard non esiste, ma non penso che sia quello che stai facendo ...

+0

+1: buon input, grazie per il commento. –

Problemi correlati