Aggiunta della capacità di scripting a un'applicazione .NET

1

Ho già un'implementazione funzionante che aggiunge script a un'applicazione. L'applicazione attualmente genera e compila script da snippet C # (presi da diversi utenti fornisce file di configurazione) in assembly usando il CodeDOM. All'inizio mi sono imbattuto nei seguenti problemi:

  1. Gestione degli AppDomain e necessità di serializzazione difficili
  2. problema di rendimento = > frequenti modifiche agli script attivano una ricompilazione
  3. le modifiche non possono essere apportate sul posto negli script durante l'esecuzione di
  4. difficile fornire una GUI per il debug (punti di interruzione), il writer ha bisogno di un debugger ...

I "ha hackerato" una soluzione su 1 caricando tutto nell'AppDomain principale. Il problema è che nulla può essere scaricato ... Dopo un po 'di tempo l'utilizzo della memoria è enorme.

Per questo motivo, alla fine, prenderei in considerazione l'ipotesi di passare a una soluzione interpretata, ma voglio rimanere vicino a un linguaggio C # a causa della base di codice esistente. C'è un mucchio di librerie su Vsa, S #, Script.NET, ... Ho bisogno di accedere agli oggetti nella mia applicazione dagli script e di eseguire anche i metodi negli script dalla mia applicazione. Pensa anche che passare a un linguaggio interpretato la giusta strategia o dovrei provare ad aggiungere una modalità di debug al concetto esistente iniettando il codice come chiamando un metodo tra ogni riga dello script per consentire un'esecuzione passo passo .... Tuttavia la gestione di AppDomain rimane un incubo da gestire.

Non è certo la prima volta che qualcuno corre in una situazione del genere. Non sono riuscito a trovare alcuna libreria wrapper / helper FOSS per semplificare la gestione di CodeDOM, né elementi GUI per fornire blocchi di costruzione per un debugger minimo. Attualmente ho creato una propria GUI e passo le chiamate negli script e mostro le modifiche agli oggetti dell'applicazione (prima / dopo le chiamate) all'interno della GUI.

Si prega di fare riferimento solo a FOSS source / libs.

    
posta jdehaan 02.03.2012 - 17:20
fonte

2 risposte

1

Ci sono alcune opzioni interpretate che sono più dinamiche ma parenti stretti di .NET. Penso che lascerei che il mio pubblico guidasse la scelta.

  • Per sys-admins vorrei provare ad esporre i commandlet di powershell e lasciare che lo usassero. Dovrebbero essere a loro agio laggiù ed è uno strumento molto potente e adatto a .NET. Ringraziamo @jmh_gr per averlo suggerito nei commenti.

  • Per gli sviluppatori vorrei esaminare un'implementazione CLR dinamica di una lingua ben nota. Mi viene in mente IronPython . F # ha anche una modalità di scripting interattivo che potresti essere in grado di usare se vuoi aderire a più lingue simili a quelle ufficiali.

  • Per i non sviluppatori penserei di usare qualcosa come Boo per creare il mio DSL in modo da rendere la verbage sensata.

Infine, nessuna di queste strategie si escludono a vicenda. In qualche modo, si costruiscono l'un l'altro in quanto richiedono che molte delle stesse strutture abbiano successo.

    
risposta data 29.04.2012 - 15:29
fonte
0

Puoi riutilizzare i macchinari nella shell C # di Mono. Fa quello che stai facendo con alcuni miglioramenti, come l'uso di una libreria contenente un compilatore C #, invece di eseguire la riga di comando uno ...

link

L'aggiunta di importazioni automatiche e assemblaggi di riferimento è abbastanza semplice, per renderli disponibili per i tuoi utenti.

È una doppia licenza ai sensi del MIT X11 o GNU GPL

Codice su link

    
risposta data 30.03.2012 - 15:12
fonte

Leggi altre domande sui tag