Compiler du code par programmation à l’aide du compilateur C#
Cet article explique comment compiler du code à partir d’une source de texte à l’aide du compilateur C#.
Version d’origine du produit : Visual Studio, .NET Framework
Numéro de la base de connaissances d’origine : 304655
Résumé
Microsoft .NET Framework expose des classes qui vous permettent d’accéder par programmation au compilateur de langage C#. Cela peut être utile si vous souhaitez écrire vos propres utilitaires de compilation de code. Cet article fournit un exemple de code qui vous permet de compiler du code à partir d’une source de texte. L’application vous permet de générer simplement l’exécutable ou de générer l’exécutable et de l’exécuter. Toutes les erreurs qui se produisent pendant le processus de compilation sont affichées sur le formulaire.
Configuration requise
- Visual Studio
- Compilateur de langage Visual C#
Compiler du code à l’aide du compilateur C#
Le .NET Framework fournit l’interface d’exécution du ICodeCompiler
compilateur. La CSharpCodeProvider
classe implémente cette interface et fournit l’accès aux instances du générateur de code C# et du compilateur de code. L’exemple de code suivant crée un instance de et l’utilise CSharpCodeProvider
pour obtenir une référence à une ICodeCompiler
interface.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
Une fois que vous avez une référence à une ICodeCompiler
interface, vous pouvez l’utiliser pour compiler votre code source. Vous passerez des paramètres au compilateur à l’aide de la CompilerParameters
classe . Voici un exemple :
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
Le code ci-dessus utilise l’objet CompilerParameters
pour indiquer au compilateur que vous souhaitez générer un fichier exécutable (par opposition à une DLL) et que vous souhaitez générer l’assembly obtenu sur le disque. L’appel à CompileAssemblyFromSource
est l’endroit où l’assembly est compilé. Cette méthode prend l’objet parameters et le code source, qui est une chaîne. Après avoir compilé votre code, vous pouvez case activée pour voir s’il y a eu des erreurs de compilation. Vous utilisez la valeur de retour de CompileAssemblyFromSource
, qui est un CompilerResults
objet . Cet objet contient une collection errors, qui contient toutes les erreurs qui se sont produites pendant la compilation.
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;
}
}
Il existe d’autres options de compilation, telles que la compilation à partir d’un fichier. Vous pouvez également compiler par lots, ce qui signifie que vous pouvez compiler plusieurs fichiers ou sources en même temps.
Exemple de procédure pas à pas
Créez une application Windows Visual C# .NET. Form1 est créé par défaut.
Ajoutez un contrôle Button à Form1, puis remplacez sa propriété Text par Build.
Ajoutez un autre contrôle Button à Form1, puis remplacez sa propriété Text par Exécuter.
Ajoutez deux contrôles TextBox à Form1, définissez la propriété Multiline pour les deux contrôles sur True, puis dimensionner ces contrôles afin de pouvoir coller plusieurs lignes de texte dans chacun d’eux.
Dans l’éditeur de code, ouvrez le fichier source Form1.cs .
Dans la
Form1
classe , collez le gestionnaire de clic de bouton suivant.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); } }
Au début du fichier, ajoutez les instructions suivantes
using
:using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp;
Dans Form1.cs, recherchez le
Form1
constructeur.Après l’appel à
InitializeComponent
dans leForm1
constructeur, ajoutez le code suivant pour relier le gestionnaire de clic de bouton aux deux boutons que vous avez ajoutés à Form1.public Form1() { InitializeComponent(); this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button1_Click); }
Exécutez le projet. Après le chargement de Form1 , cliquez sur le bouton Générer .
Remarque
Vous obtenez une erreur du compilateur.
Ensuite, copiez le texte suivant dans la zone de texte, en remplaçant tout texte existant :
using System; namespace HelloWorld { /// <summary> /// Summary description for Class1. /// </summary> class HelloWorldClass { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
Cliquez à nouveau sur Générer . La compilation doit réussir.
Cliquez sur Exécuter pour compiler le code et exécuter le fichier exécutable résultant. La compilation crée un fichier exécutable appelé Out.exe, qui est enregistré dans le même dossier que l’application que vous exécutez.
Remarque
Vous pouvez modifier le code dans la zone de texte pour afficher différentes erreurs du compilateur. Par exemple, supprimez l’un des points-virgules et reconstruisez le code.
Enfin, modifiez le code dans la zone de texte pour générer une autre ligne de texte dans la fenêtre de console. Cliquez sur Exécuter pour afficher la sortie.
References
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour