您目前已離線,請等候您的網際網路重新連線

如何以程式設計方式使用 Visual Basic.NET 或 Visual Basic 2005 編譯器來編譯程式碼

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:304654
本文章的有 Microsoft Visual C#.NET] 版本請參閱 304655

本文參照下列 Microsoft.NET Framework 類別庫命名空間:
  • System.CodeDom.Compiler
結論
.NET Framework 會公開類別,可讓您以程式設計方式存取 Visual Basic.NET 或 Visual Basic 2005 語言編譯器。這也可能會很有用,如果您想要撰寫您自己的程式碼編譯公用程式。本文提供可讓您從文字來源的程式碼編譯的範例程式碼。應用程式可讓您不論是只要建置可執行檔或建置可執行檔並執行它。在表單上便會顯示在編譯程序期間發生任何錯誤。
其他相關資訊

步驟 1: 需求

  • Visual Studio.NET 或 Visual Studio 2005
  • Visual Basic.NET 語言編譯器或 Visual Basic 2005 語言編譯器

步驟 2: 如何以程式設計方式編譯的程式碼

.NET Framework 提供 ICodeCompiler 編譯器執行介面。VBCodeProvider 類別會實作這個介面,並提供 Visual Basic 程式碼產生器和程式碼編譯器的執行個體的存取。下列範例建立 [VBCodeProvider 的執行個體,並使用來取得 ICodeCompiler 介面的參考。

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

一旦 ICodeCompiler 介面的參考您可以使用它來編譯您的原始程式碼。您將參數傳遞到編譯器使用 CompilerParameters 類別。以下是範例:
Dim parameters As New CompilerParameters()Dim results As CompilerResultsparameters.GenerateExecutable = Trueparameters.OutputAssembly = Outputresults = icc.CompileAssemblyFromSource(parameters, SourceText)				

上述程式碼會使用 CompilerParameters 物件告訴的編譯器您想要產生的可執行檔 (相對於 DLL),且您想要輸出產生的組件到磁碟。CompileAssemblyFromSource 呼叫是編譯您的組件取得位置。這個方法會採用參數物件和來源程式碼是一個字串。一旦編譯您的程式碼您可以檢查是否發生了任何編譯錯誤,請參閱。我們使用從 CompileAssemblyFromSource,這是一個 CompilerResults 物件傳回的值。這個物件包含包含編譯期間發生任何錯誤的一個錯誤] 集合。
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				

有其他選項可用來編譯例如從一個檔案編譯。您也可以批次編譯這表示您可以在同一時間編譯多個檔案或來源。在這些類別上的額外資訊是 MSDN Online 上可用:

步驟 3: Step-by-Step 範例

  1. 建立新的 Visual Basic.NET 或 Visual Basic 2005 Windows 應用程式。預設會建立 Form1。
  2. 在 Form1 的程式碼檢視] 視窗中將所有現有的文字取代下列程式碼:
    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					
    筆記 的程式碼應該在 Visual Basic 2005 中進行變更。如果您建立名為 Form1 Visual Basic 2005 中的新表單時,會具有 Form1.vb 檔案以供您的程式碼和 Form1.Designer.vb 檔案中含有自動產生的一部份。Windows Form 設計工具會使用部分關鍵字,Form1 實作分成兩個獨立的檔案。這可以防止設計工具發出的程式碼正在與您的程式碼位置顛倒。如需有關 Visual Basic 2005 語言加強功能的詳細資訊,請造訪下列 Microsoft 網站]:如需有關部分類別和 Windows Form 設計工具的詳細資訊,請造訪下列 Microsoft 網站:
  3. 執行專案。Form1 會載入後按一下 [建立] 按鈕。請注意您取得幾個編譯器錯誤。
  4. 接下來,複製下列程式碼取代任何現有的文字在文字方塊:
    Imports SystemModule Module1    Sub Main()        Console.WriteLine("Hello World!")        Console.WriteLine("Press ENTER")        Console.ReadLine()    End SubEnd Module					
  5. 再次按一下 [建立]。編譯應該會成功。
  6. 按一下 [執行] 會將程式碼編譯並執行產生的可執行檔。編譯會建立在與您正在執行的應用程式相同的資料夾中稱為 Out.exe 」 可執行檔。

    注意:您可以修改程式碼,在文字方塊中,若要查看不同的編譯器錯誤。比方說刪除其中一個括號,並重建程式碼。
  7. 最後,修改程式碼,在文字方塊中要輸出至主控台視窗的文字另一列。按一下 [執行] 請參閱輸出。
ICodeCompiler CSharpCodeProvider CompilerParameters

內容

文章識別碼:304654 - 最後檢閱時間:05/11/2007 07:08:50 - 修訂: 4.7

Microsoft .NET Framework 1.0, Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web KB304654 KbMtzh
意見反應
acking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write("