Ho una situazione in cui una parte del mio codice viene generata tramite CodeExpressions
e l'altra dall'utente stesso (come in: l'utente scrive semplicemente il suo codice come al solito, che poi prenderei e aggiungere al mio assembly quando compila) .Possiamo costruire un assieme sia da CodeExpressions sia da codice sorgente letterale allo stesso tempo?
È possibile generare un assieme che contiene entrambi questi elementi? Avvertenza: questi due approcci conterranno classi partial
quindi devono essere nello stesso assembly.
Un altro approccio che avevo in mente era di tradurre entrambi in una rappresentazione di stringa e quindi di generare l'assembly da quella stringa, ma dubito di poter ottenere il codice sorgente da un tipo generato dall'utente (al momento della compilazione tempo).
Lavorando su questa idea potrei scrivere il codice generato da CodeExpressions in un file di testo e combinarlo con i file .cs
. Una cronologia sarebbe simile a questa: ha scritto
- utente le sue lezioni
- CodeDom albero è messa a punto a livello di codice
- utente costruisce il progetto
- CodeDom genera origine a un file di testo
- programma legge i contenuti degli utenti -defined
.cs
file - Programma letto file di testo generato
- Programma combina questi due
- programma crea una nuova
.dll
dal codice sorgente combinata
ho potuto saltare i (ridondanti) fasi di scrittura e la lettura della mia fonte CodeDom generato un file di testo e semplicemente scriverlo nella memoria come pure, naturalmente. In effetti, potrebbe essere più semplice usare i modelli di T4 pre-elaborati e caricare i risultati di questi modelli in memoria e compilare un assembly da quella stringa.
Come potete vedere, questo è molto caotico ma in questo momento sembra il più fattibile. Ho esaminato le opzioni che potrebbero renderlo più semplice?
che sto creando una libreria che creerà un assieme con classi definite dall'utente. Il modo in cui funziona è nel seguente ordine:
- Riferimenti mia biblioteca nel suo progetto
- utente crea nuova
TinyTypeSetup
esempio - utente aggiunge definizioni Piccoli tipo ad esso
- utente esegue il programma
- Programma genera assembly dai tipi dati tramite CodeDom
Quello che sto cercando di aggiungere ora è la possibilità per consentire all'utente di creare i propri file di origine e aggiungere immediatamente tali file all'assieme che viene generato. Ciò consentirebbe all'utente di specificare classi parziali con i propri metodi, oltre a quelli che ho generato io stesso.
Sono confuso. Potresti spiegare in maggior dettaglio perché non puoi semplicemente compilare tutto come stringhe (o tipi di CodeDOM, usando ['CodeSnippetCompileUnit'] (http://msdn.microsoft.com/en-us/library/system.codedom.codesnippetcompileunit? aspx)) allo stesso tempo? – svick
@svick: teoricamente potrei, ma questo significherebbe che devo assemblare quella stringa io stesso. Generare una stringa attraverso il mio codice sorgente sarebbe molto incline a errori di battitura e piuttosto brutto per sporcare la mia fonte con un mucchio di stringhe. –
@svick: ho aggiunto alcune informazioni di base –