Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come compilare il codice da un'origine di testo usando il compilatore C#.
Versione originale del prodotto: Visual Studio, .NET Framework
Numero KB originale: 304655
Riepilogo
Microsoft .NET Framework espone classi che consentono di accedere a livello di codice al compilatore del linguaggio C#. Questo può essere utile se si vogliono scrivere utilità di compilazione del codice personalizzate. Questo articolo fornisce codice di esempio che consente di compilare codice da un'origine di testo. L'applicazione consente di compilare semplicemente l'eseguibile o compilare il file eseguibile ed eseguirlo. Tutti gli errori che si verificano durante il processo di compilazione vengono visualizzati nel modulo.
Requisiti
- Visual Studio
- Compilatore di linguaggio Visual C#
Compilare il codice usando il compilatore C#
.NET Framework fornisce l'interfaccia di esecuzione del ICodeCompiler
compilatore. La CSharpCodeProvider
classe implementa questa interfaccia e fornisce l'accesso alle istanze del generatore di codice C# e del compilatore di codice. Il codice di esempio seguente crea un'istanza di CSharpCodeProvider
e la usa per ottenere un riferimento a un'interfaccia ICodeCompiler
.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
Dopo aver ottenuto un riferimento a un'interfaccia ICodeCompiler
, è possibile usarlo per compilare il codice sorgente. I parametri verranno passati al compilatore usando la CompilerParameters
classe . Ecco un esempio:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
Il codice precedente usa l'oggetto CompilerParameters
per indicare al compilatore che si vuole generare un file eseguibile (anziché una DLL) e che si vuole restituire l'assembly risultante su disco. La chiamata a CompileAssemblyFromSource
è la posizione in cui viene compilato l'assembly. Questo metodo accetta l'oggetto parameters e il codice sorgente, ovvero una stringa. Dopo aver compilato il codice, è possibile verificare se si sono verificati errori di compilazione. Usare il valore restituito da CompileAssemblyFromSource
, ovvero un CompilerResults
oggetto . Questo oggetto contiene un insieme di errori, che contiene eventuali errori che si sono verificati durante la compilazione.
if (results.Errors.Count > 0)
{
foreach(CompilerError CompErr in results.Errors)
{
textBox2.Text = textBox2.Text +
"Line number " + CompErr.Line +
", Error Number: " + CompErr.ErrorNumber +
", '" + CompErr.ErrorText + ";" +
Environment.NewLine + Environment.NewLine;
}
}
Sono disponibili altre opzioni per la compilazione, ad esempio la compilazione da un file. È anche possibile compilare in batch, il che significa che è possibile compilare più file o origini contemporaneamente.
Esempio di procedura dettagliata
Creare una nuova applicazione Windows Visual C# .NET. Form1 viene creato per impostazione predefinita.
Aggiungere un controllo Button a Form1 e quindi modificarne la proprietà Text in Build.
Aggiungere un altro controllo Button a Form1 e quindi modificarne la proprietà Text in Esegui.
Aggiungere due controlli TextBox a Form1, impostare la proprietà Multiline per entrambi i controlli su True e quindi ridimensionarli in modo da poter incollare più righe di testo in ognuna di esse.
Nell'editor di codice aprire il file di origine Form1.cs .
Form1
Nella classe incollare il gestore di clic del pulsante seguente.private void button1_Click(object sender, System.EventArgs e) { CSharpCodeProvider codeProvider = new CSharpCodeProvider(); ICodeCompiler icc = codeProvider.CreateCompiler(); string Output = "Out.exe"; Button ButtonObject = (Button)sender; textBox2.Text = ""; System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); //Make sure we generate an EXE, not a DLL parameters.GenerateExecutable = true; parameters.OutputAssembly = Output; CompilerResults results = icc.CompileAssemblyFromSource(parameters, textBox1.Text); if (results.Errors.Count > 0) { textBox2.ForeColor = Color.Red; foreach (CompilerError CompErr in results.Errors) { textBox2.Text = textBox2.Text + "Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine; } } else { //Successful Compile textBox2.ForeColor = Color.Blue; textBox2.Text = "Success!"; //If we clicked run then launch our EXE if (ButtonObject.Text == "Run") Process.Start(Output); } }
All'inizio del file aggiungere queste
using
istruzioni:using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp;
In Form1.cs individuare il
Form1
costruttore.Dopo la chiamata a
InitializeComponent
nelForm1
costruttore, aggiungere il codice seguente per collegare il gestore di clic del pulsante a entrambi i pulsanti aggiunti a Form1.public Form1() { InitializeComponent(); this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button1_Click); }
Eseguire il progetto. Dopo il caricamento di Form1 , fare clic sul pulsante Compila .
Note
Viene visualizzato un errore del compilatore.
Copiare quindi il testo seguente nella casella di testo, sostituendo qualsiasi testo esistente:
using System; namespace HelloWorld { /// <summary> /// Summary description for Class1. /// </summary> class HelloWorldClass { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
Fare di nuovo clic su Compila . La compilazione dovrebbe avere esito positivo.
Fare clic su Esegui per compilare il codice ed eseguire il file eseguibile risultante. La compilazione crea un file eseguibile denominato Out.exe, che viene salvato nella stessa cartella dell'applicazione in esecuzione.
Note
È possibile modificare il codice nella casella di testo per visualizzare diversi errori del compilatore. Ad esempio, eliminare uno dei punti e virgola e ricompilare il codice.
Infine, modificare il codice nella casella di testo per restituire un'altra riga di testo nella finestra della console. Fare clic su Esegui per visualizzare l'output.