Scripting con Roslyn

di il
2 risposte

Scripting con Roslyn

Buongiorno a tutti,

Sto cimentandomi a provare di implementare degli script in un progetto Windows form, a tale proposito e a completezza di informazioni ecco il link dal quale ho “preso ispirazione”

https://medium.com/@mike_64083/c-scripting-with-roslyn-7df86fdb2b26

Ho fatto uno script più complesso ma, per isolare il problema, l'ho ridotto al minimo come segue

        private string CodiceCSharpComplesso()
        {
            string code = @"
                           MessageBox.Show(""Vediamo se funziona"");
                           ";
            return code;
        }

La valutazione dello script la faccio in un metodo nel modo seguente

            var codeToEval = CodiceCSharpComplesso();
            var options = ScriptOptions.Default;
            options = options.WithImports("System", "System.Windows.Forms");
            var result = CSharpScript.EvaluateAsync(codeToEval, options);
            return result;

Il mio problema è che se creo una soluzione tradizionale Windows Forms App (.NET Framework) che utilizza il NET framework 4.8 il tutto funziona regolarmente, ma se creo una soluzione Windows Form App che utilizza il NET 8.0 (Long Term Support) sembra che non trovi la classe MessageBox, mi esce il messaggio

Microsoft.CodeAnalysis.Scripting.CompilationErrorException: '(2,28): error CS0103: Il nome 'MessageBox' non esiste nel contesto corrente'

Però anche in NET 8.0 la MessageBox mi risulta nello spazio dei nomi “System.Windows.Form” quindi non capisco…

C'è qualcuno che può aiutarmi a capire?

Grazie

2 Risposte

  • Re: Scripting con Roslyn

    25/07/2024 - Lucios ha scritto:


    Però anche in NET 8.0 la MessageBox mi risulta nello spazio dei nomi “System.Windows.Form” quindi non capisco…

    Il problema credo sia ravvisabile nel fatto che Windows Forms non è più parte integrante del framework, ma è implementato separatamente e all'interno di package che vanno aggiunti al progetto (il quale tra l'altro deve avere specifici “tag” nel file di progetto stesso per poter essere identificato come “solo Windows” e “app desktop”).

    Qui credo che si debba andare ad aggiungere le istruzioni per referenziare il package/assembly relativo per poter “vedere” queste classi.

  • Re: Scripting con Roslyn

    Ciao Alka

    Windows Forms non è più parte integrante del framework, ma è implementato separatamente e all'interno di package

    ok, ma allora perchè se faccio una riga non di script ma di codice con un MessageBox, lo stesso viene visto nello spazio “System.Windows.Form”? 

    Io mi immagino che questa riga

    options = options.WithImports("System", "System.Windows.Forms");

    serva appunto ad utilizzare lo spazio dei nomi.

    Quale pacchetto NuGet dovrebbe essere aggiunto al progetto? Io non ho trovato nulla.

Devi accedere o registrarti per scrivere nel forum
2 risposte