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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 304654 - Produkte anzeigen, auf die sich dieser Artikel bezieht
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.
Alles erweitern | Alles schließen

Auf dieser Seite

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 CompilerResults

parameters.GenerateExecutable = True
parameters.OutputAssembly = Output
results = 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
   Next
End 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:
http://search.microsoft.com/us/dev/default.asp

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 On
    Imports System.CodeDom.Compiler
    
    
    Public 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 Sub
    
    End 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 System
    
    Module Module1
    
        Sub Main()
            Console.WriteLine("Hello World!")
            Console.WriteLine("Press ENTER")
            Console.ReadLine()
        End Sub
    
    End 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.

Eigenschaften

Artikel-ID: 304654 - Geändert am: Freitag, 6. Februar 2004 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft .NET Framework Software Development Kit 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbhowto kbbcl kbcompiler kbprod2web KB304654
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com