Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

SO WIRD'S GEMACHT: Code mithilfe des Visual Basic .NET-Compilers programmatisch kompilieren

Dieser Artikel wurde zuvor veröffentlicht unter D304654
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
304654 HOWTO: Programmatically Compile Code Using the Visual Basic .NET Compiler
In Artikel 304655 wird dieses Problem für Microsoft Visual C# .NET beschrieben.

Hinweis: Die Verwendung der hier aufgeführten Informationen sowie Makro- oder Programmcodes geschieht auf Ihre eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen.
Zusammenfassung
Der .NET-Framework beinhaltet Klassen, mit deren Hilfe Sie programmatisch auf den Visual Basic .NET-Compiler zugreifen können. Dies ist eventuell hilfreich, wenn Sie eigene Code-Kompilierungsprogramme schreiben möchten. Dieser Artikel enthält Beispielcode, mit dem Sie Code aus einer Textquelle kompilieren können. Diese Anwendung erlaubt es Ihnen, entweder nur die ausführbare Datei zu erstellen oder die ausführbare Datei zu erstellen und auszuführen. Während des Kompilierungsvorgangs erscheinende Fehlermeldungen werden im Formular angezeigt.
Weitere Informationen

Schritt 1: Voraussetzungen

  • Visual Studio .NET
  • Visual Basic .NET-Sprachcompiler

Schritt 2: Kompilieren von Code mithilfe eines Programms

Der .NET-Framework stellt die ICodeCompiler-Kompilerschnittstelle bereit. Die Klasse "VBCodeProvider" implementiert diese Schnittstelle und bietet Zugriff auf Instanzen des Visual Basic-Code-Generators und des Code-Compilers. Das folgende Beispiel erstellt eine Instanz von "VBCodeProvider" und ruft damit einen Verweis auf die ICodeCompiler-Schnittstelle ab.

Dim codeProvider As New VBCodeProvider()Dim icc As ICodeCompiler = codeProvider.CreateCompiler

Wenn Sie über einen Verweis zu einer ICodeCompiler-Schnittstelle verfügen, können Sie damit Ihren Quellcode kompilieren. Die Parameter werden dem Compiler anhand der Klasse CompilerParameters übergeben. Im Folgenden finden Sie ein Beispiel:
Dim parameters As New CompilerParameters()Dim results As CompilerResultsparameters.GenerateExecutable = Trueparameters.OutputAssembly = Outputresults = icc.CompileAssemblyFromSource(parameters, SourceText)

Der oben aufgeführte Code teilt dem Compiler mit Hilfe des Objekts "CompilerParameters" mit, dass Sie eine ausführbare Datei erstellen möchten (im Gegensatz zu einer DLL), und dass Sie die resultierende Assembly auf dem Datenträger ausgeben wollen. Beim Aufruf von CompileAssemblyFromSource wird Ihre Assembly kompiliert. Diese Methode verwendet Ihr Parameterobjekt und den Quellcode, bei dem es sich um eine Zeichenfolge handelt. Nachdem Sie den Code kompiliert haben, können Sie prüfen, ob Fehler bei der Kompilierung aufgetreten sind. Hier wird der Rückgabewert von CompileAssemblyFromSource verwendet, der ein CompilerResults-Objekt ist. Dieses Objekt beinhaltet eine Fehlersammlung, die alle bei der Kompilierung aufgetretenen Fehler auflistet.
If results.Errors.Count > 0 Then   'There were compiler errors   Dim CompErr As CompilerError   For Each CompErr In results.Errors      textBox2.Text = textBox2.Text & _                      "Line number " & CompErr.Line & _                      ", Error Number: " & CompErr.ErrorNumber & _                      ", '" & CompErr.ErrorText & ";" & _      Environment.NewLine & Environment.NewLine   NextEnd If

Es existieren auch andere Kompilierungsoptionen, wie beispielsweise die Kompilierung aus einer Datei. Sie können die Kompilierung auch im Stapelverarbeitungsmodus ausführen, d.h., Sie können mehrere Dateien oder Quellen gleichzeitig kompilieren. Weitere Informationen zu diesen Klassen finden Sie auf der Website von MSDN Online:

Schritt 3: Beispiel mit Schrittanleitung

  1. Erstellen Sie eine neue Visual Basic .NET-Windows-Anwendung. Form1 wird standardmäßig erstellt.
  2. Ersetzen Sie im Code-Fenster von Form1 den gesamten Text durch den folgenden Code:
    Option Strict OnImports System.CodeDom.CompilerPublic Class Form1    Inherits System.Windows.Forms.Form#Region " Windows Form Designer generated code "    Public Sub New()        MyBase.New()        'This call is required by the Windows Form Designer.        InitializeComponent()        'Add any initialization after the InitializeComponent() call    End Sub    'Form overrides dispose to clean up the component list.    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)        If disposing Then            If Not (components Is Nothing) Then                components.Dispose()            End If        End If        MyBase.Dispose(disposing)    End Sub    Friend WithEvents textBox1 As System.Windows.Forms.TextBox    Friend WithEvents button1 As System.Windows.Forms.Button    Friend WithEvents textBox2 As System.Windows.Forms.TextBox    Friend WithEvents button2 As System.Windows.Forms.Button    'Required by the Windows Form Designer    Private components As System.ComponentModel.Container    'NOTE: The following procedure is required by the Windows Form Designer    'It can be modified using the Windows Form Designer.      'Do not modify it using the code editor.    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()        Me.textBox2 = New System.Windows.Forms.TextBox()        Me.textBox1 = New System.Windows.Forms.TextBox()        Me.button1 = New System.Windows.Forms.Button()        Me.button2 = New System.Windows.Forms.Button()        Me.SuspendLayout()        '        'textBox2        '        Me.textBox2.BackColor = System.Drawing.SystemColors.Control        Me.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None        Me.textBox2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))        Me.textBox2.ForeColor = System.Drawing.SystemColors.WindowText        Me.textBox2.Location = New System.Drawing.Point(264, 56)        Me.textBox2.Multiline = True        Me.textBox2.Name = "textBox2"        Me.textBox2.Size = New System.Drawing.Size(240, 232)        Me.textBox2.TabIndex = 2        Me.textBox2.Text = ""        '        'textBox1        '        Me.textBox1.Location = New System.Drawing.Point(16, 48)        Me.textBox1.Multiline = True        Me.textBox1.Name = "textBox1"        Me.textBox1.Size = New System.Drawing.Size(240, 240)        Me.textBox1.TabIndex = 0        Me.textBox1.Text = "textBox1"        '        'button1        '        Me.button1.Location = New System.Drawing.Point(368, 304)        Me.button1.Name = "button1"        Me.button1.TabIndex = 1        Me.button1.Text = "Build"        '        'button2        '        Me.button2.Location = New System.Drawing.Point(456, 304)        Me.button2.Name = "button2"        Me.button2.TabIndex = 1        Me.button2.Text = "Run"        '        'Form1        '        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)        Me.ClientSize = New System.Drawing.Size(544, 333)        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.button2, Me.textBox1, Me.button1, Me.textBox2})        Me.Name = "Form1"        Me.Text = "Form1"        Me.ResumeLayout(False)    End Sub#End Region    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click, button2.Click        Dim codeProvider As New VBCodeProvider()        Dim icc As ICodeCompiler = codeProvider.CreateCompiler        Dim Output As String = "Out.exe"        Dim ButtonObject As Button = CType(sender, Button)        textBox2.Text = ""        Dim parameters As New CompilerParameters()        Dim results As CompilerResults        'Make sure we generate an EXE, not a DLL        parameters.GenerateExecutable = True        parameters.OutputAssembly = Output        results = icc.CompileAssemblyFromSource(parameters, textBox1.Text)        If results.Errors.Count > 0 Then            'There were compiler errors            textBox2.ForeColor = Color.Red            Dim CompErr As CompilerError            For Each CompErr In results.Errors                textBox2.Text = textBox2.Text & _                "Line number " & CompErr.Line & _                ", Error Number: " & CompErr.ErrorNumber & _                ", '" & CompErr.ErrorText & ";" & _                Environment.NewLine & Environment.NewLine            Next        Else            'Successful Compile            textBox2.ForeColor = Color.Blue            textBox2.Text = "Success!"            'If we clicked run then launch the EXE            If ButtonObject.Text = "Run" Then Process.Start(Output)        End If    End SubEnd Class
  3. Führen Sie das Projekt aus. Klicken Sie auf die Schaltfläche Erstellen, nachdem Form1 geladen wurde. Sie werden feststellen, dass eine Reihe von Compilerfehlern angezeigt werden.
  4. Kopieren Sie anschließend den folgenden Code in das Textfeld, der den vorhandenen Text ersetzt:
    Imports SystemModule Module1    Sub Main()        Console.WriteLine("Hello World!")        Console.WriteLine("Press ENTER")        Console.ReadLine()    End SubEnd Module
  5. Klicken Sie erneut auf Erstellen. Die Kompilierung wird erfolgreich ausgeführt.
  6. Klicken Sie auf Ausführen. Der Code wird kompiliert und die resultierende ausführbare Datei wird ausgeführt. Durch die Kompilierung wird eine ausführbare Datei mit dem Namen "Out.exe" im gleichen Ordner wie die Anwendung erstellt, die Sie ausführen.

    HINWEIS: Sie können den Code im Textfeld ändern, um verschiedene Compilerfehler anzuzeigen. Löschen Sie beispielsweise eine der Klammern und erstellen Sie den Code neu.
  7. Ändern Sie zuletzt den Code im Textfeld, um eine weitere Zeile Text im Konsolenfenster auszugeben. Klicken Sie auf Ausführen, um die Ausgabe anzuzeigen.
Verweise
Klasse "VBCodeProvider"
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfMicrosoftVisualBasicVBCodeProviderClassTopic.asp

ICodeCompiler-Schnittstelle
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemCodeDomCompilerICodeCompilerClassTopic.asp

Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
ICodeCompiler CSharpCodeProvider CompilerParameters
Eigenschaften

Artikelnummer: 304654 – Letzte Überarbeitung: 02/06/2004 13:48:00 – Revision: 2.0

Microsoft .NET Framework Software Development Kit 1.0, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbhowto kbbcl kbcompiler kbprod2web KB304654
Feedback
var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("