Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u code compileert vanuit een tekstbron met behulp van C#-compiler.
Oorspronkelijke productversie: Visual Studio, .NET Framework
Oorspronkelijk KB-nummer: 304655
Samenvatting
Microsoft .NET Framework maakt klassen beschikbaar waarmee u programmatisch toegang kunt krijgen tot de C#-taalcompilator. Dit kan handig zijn als u uw eigen hulpprogramma's voor het compileren van code wilt schrijven. Dit artikel bevat voorbeeldcode waarmee u code kunt compileren vanuit een tekstbron. Met de toepassing kunt u alleen het uitvoerbare bestand bouwen of het uitvoerbare bestand bouwen en uitvoeren. Eventuele fouten die optreden tijdens het compilatieproces, worden weergegeven op het formulier.
Behoeften
- Visual Studio
- Visual C#-taalcompilatie
Code compileren met behulp van C#-compiler
Het .NET Framework biedt de interface voor het uitvoeren van de ICodeCompiler
compiler. De CSharpCodeProvider
klasse implementeert deze interface en biedt toegang tot exemplaren van de C#-codegenerator en codecompilator. De volgende voorbeeldcode maakt een exemplaar van CSharpCodeProvider
en gebruikt deze om een verwijzing naar een ICodeCompiler
interface op te halen.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
Zodra u een verwijzing naar een ICodeCompiler
interface hebt, kunt u deze gebruiken om uw broncode te compileren. U geeft parameters door aan de compiler met behulp van de CompilerParameters
klasse. Dit is een voorbeeld:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
In de bovenstaande code wordt het CompilerParameters
object gebruikt om de compiler te laten weten dat u een uitvoerbaar bestand wilt genereren (in plaats van een DLL) en dat u de resulterende assembly naar de schijf wilt uitvoeren. De aanroep naar CompileAssemblyFromSource
de locatie waar de assembly wordt gecompileerd. Deze methode gebruikt het parameterobject en de broncode, een tekenreeks. Nadat u de code hebt gecompileerd, kunt u controleren of er compilatiefouten zijn opgetreden. U gebruikt de retourwaarde van CompileAssemblyFromSource
, een CompilerResults
object. Dit object bevat een verzameling fouten, die fouten bevat die zijn opgetreden tijdens het compileren.
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;
}
}
Er zijn andere opties voor het compileren, zoals compileren vanuit een bestand. U kunt ook batchcompilatie uitvoeren, wat betekent dat u meerdere bestanden of bronnen tegelijk kunt compileren.
Voorbeeld van stapsgewijze procedure
Maak een nieuwe Visual C# .NET Windows-toepassing. Form1 wordt standaard gemaakt.
Voeg een besturingselement Knop toe aan Form1 en wijzig vervolgens de teksteigenschap in Opbouwen.
Voeg nog een knopbesturingselement toe aan Form1 en wijzig vervolgens de teksteigenschap in Uitvoeren.
Voeg twee besturingselementen voor tekstvak toe aan Form1, stel de eigenschap Meerdere regels voor beide besturingselementen in op Waar en pas deze besturingselementen vervolgens aan zodat u meerdere regels tekst in elk besturingselement kunt plakken.
Open in de code-editor het Form1.cs bronbestand.
Plak de volgende knop in de
Form1
klasse op handler.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); } }
Voeg aan het begin van het bestand de volgende
using
instructies toe:using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp;
Zoek in Form1.cs de
Form1
constructor.Voeg na de aanroep in
InitializeComponent
deForm1
constructor de volgende code toe om de knopknophandler te koppelen aan beide knoppen die u aan Form1 hebt toegevoegd.public Form1() { InitializeComponent(); this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button1_Click); }
Voer het project uit. Nadat Form1 is geladen, klikt u op de knop Opbouwen .
Notitie
U krijgt een compilerfout.
Kopieer vervolgens de volgende tekst naar het tekstvak, waarbij u bestaande tekst vervangt:
using System; namespace HelloWorld { /// <summary> /// Summary description for Class1. /// </summary> class HelloWorldClass { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
Klik nogmaals op Opbouwen . Het compileren moet zijn geslaagd.
Klik op Uitvoeren en compileer de code en voer het resulterende uitvoerbare bestand uit. De compileer maakt een uitvoerbaar bestand met de naam Out.exe, dat wordt opgeslagen in dezelfde map als de toepassing die u uitvoert.
Notitie
U kunt de code in het tekstvak wijzigen om verschillende compilerfouten te zien. Verwijder bijvoorbeeld een van de puntkomma's en bouw de code opnieuw.
Wijzig ten slotte de code in het tekstvak om een andere tekstregel naar het consolevenster uit te voeren. Klik op Uitvoeren om de uitvoer weer te geven.