Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie Code aus einer Textquelle mithilfe des C#-Compilers kompilieren.
Originalproduktversion: Visual Studio, .NET Framework
Ursprüngliche KB-Nummer: 304655
Zusammenfassung
Microsoft .NET Framework macht Klassen verfügbar, mit denen Sie programmgesteuert auf den C#-Sprachcompiler zugreifen können. Dies kann nützlich sein, wenn Sie Eigene Codekompilierungsprogramme schreiben möchten. Dieser Artikel enthält Beispielcode, mit dem Sie Code aus einer Textquelle kompilieren können. Mit der Anwendung können Sie entweder einfach die ausführbare Datei erstellen oder die ausführbare Datei erstellen und ausführen. Alle Fehler, die während des Kompilierungsprozesses auftreten, werden im Formular angezeigt.
Anforderungen
- Visual Studio
- Visual C#-Sprachcompiler
Kompilieren von Code mithilfe des C#-Compilers
.NET Framework stellt die ICodeCompiler
Compilerausführungsschnittstelle bereit. Die CSharpCodeProvider
Klasse implementiert diese Schnittstelle und bietet Zugriff auf Instanzen des C#-Codegenerators und Codecompilers. Der folgende Beispielcode erstellt eine Instanz von CSharpCodeProvider
und verwendet diese, um einen Verweis auf eine ICodeCompiler
Schnittstelle abzurufen.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
Sobald Sie einen Verweis auf eine ICodeCompiler
Schnittstelle haben, können Sie ihn zum Kompilieren des Quellcodes verwenden. Sie übergeben Parameter mithilfe der CompilerParameters
Klasse an den Compiler. Hier ist ein Beispiel:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
Der obige Code verwendet das CompilerParameters
Objekt, um dem Compiler mitzuteilen, dass Sie eine ausführbare Datei (im Gegensatz zu einer DLL) generieren möchten und dass Sie die resultierende Assembly auf den Datenträger ausgeben möchten. Der Aufruf ist der Ort, an CompileAssemblyFromSource
dem die Assembly kompiliert wird. Diese Methode verwendet das Parameterobjekt und den Quellcode, bei dem es sich um eine Zeichenfolge handelt. Nachdem Sie den Code kompiliert haben, können Sie überprüfen, ob Kompilierungsfehler aufgetreten sind. Sie verwenden den Rückgabewert aus , der CompileAssemblyFromSource
ein CompilerResults
Objekt ist. Dieses Objekt enthält eine Fehlerauflistung, die alle Fehler enthält, die während der Kompilierung aufgetreten sind.
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;
}
}
Es gibt weitere Optionen zum Kompilieren, z. B. das Kompilieren aus einer Datei. Sie können auch die Batchkompilierung erstellen, was bedeutet, dass Sie mehrere Dateien oder Quellen gleichzeitig kompilieren können.
Schritt-für-Schritt-Prozedur (Beispiel)
Erstellen Sie eine neue Visual C# .NET Windows-Anwendung. Formular1 wird standardmäßig erstellt.
Fügen Sie ein Schaltflächen-Steuerelement zu Form1 hinzu, und ändern Sie dann die Texteigenschaft in Build.
Fügen Sie ein weiteres Schaltflächen-Steuerelement zu Form1 hinzu, und ändern Sie dann die Texteigenschaft in "Ausführen".
Fügen Sie zwei TextBox-Steuerelemente zu Form1 hinzu, legen Sie die Mehrzeilige Eigenschaft für beide Steuerelemente auf "True" fest, und passen Sie dann die Größe dieser Steuerelemente an, damit Sie mehrere Textzeilen in die einzelnen Steuerelemente einfügen können.
Öffnen Sie im Code-Editor die Form1.cs Quelldatei.
Fügen Sie in der
Form1
Klasse den folgenden Schaltflächenklickhandler ein.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); } }
Fügen Sie am Anfang der Datei die folgenden
using
Anweisungen hinzu:using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp;
Suchen Sie in Form1.cs den
Form1
Konstruktor.Fügen Sie nach dem Aufruf
InitializeComponent
desForm1
Konstruktors den folgenden Code hinzu, um den Schaltflächenklickhandler mit beiden Schaltflächen zu verknüpfen, die Sie Form1 hinzugefügt haben.public Form1() { InitializeComponent(); this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button1_Click); }
Führen Sie das Projekt aus. Klicken Sie nach dem Laden von Form1 auf die Schaltfläche "Erstellen ".
Notiz
Sie erhalten einen Compilerfehler.
Kopieren Sie als Nächstes den folgenden Text in das Textfeld, und ersetzen Sie dabei jeden vorhandenen Text:
using System; namespace HelloWorld { /// <summary> /// Summary description for Class1. /// </summary> class HelloWorldClass { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
Klicken Sie erneut auf "Erstellen" . Die Kompilierung sollte erfolgreich sein.
Klicken Sie auf "Ausführen", und der Code wird kompiliert und die resultierende ausführbare Datei ausgeführt. Die Kompilierung erstellt eine ausführbare Datei namens Out.exe, die im selben Ordner wie die Anwendung gespeichert wird, die Sie ausführen.
Notiz
Sie können den Code im Textfeld ändern, um unterschiedliche Compilerfehler anzuzeigen. Löschen Sie beispielsweise einen der Semikolons, und erstellen Sie den Code neu.
Ändern Sie abschließend den Code im Textfeld so, dass eine andere Textzeile in das Konsolenfenster ausgegeben wird. Klicken Sie auf "Ausführen" , um die Ausgabe anzuzeigen.