วิธีการคอมไพล์รหัสโดยทางโปรแกรม โดยใช้คอมไพเลอร์ Visual Basic .NET หรือ Visual Basic 2005

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 304654 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
สำหรับรุ่น Microsoft Visual c# .NET ของบทความนี้ ดู304655.

บทความนี้อ้างถึง namespace ไลบรารีคลาสของ Microsoft .NET Framework ต่อไปนี้:
  • System.CodeDom.Compiler
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

.NET Framework exposes ระดับชั้นที่อนุญาตให้คุณสามารถเข้าถึงโดยทางโปรแกรม Visual Basic .NET หรือ Visual Basic 2005 ภาษาคอมไพเลอร์ ซึ่งอาจจะเป็นประโยชน์ในกรณีที่คุณต้องการเขียนของคุณเองโปรแกรมอรรถประโยชน์ที่คอมไพล์รหัส บทความนี้แสดงตัวอย่างรหัสที่ช่วยให้คุณสามารถที่คอมไพล์รหัสจากแหล่งที่มาของข้อความ โปรแกรมประยุกต์ช่วยให้คุณอย่างใดอย่างหนึ่งเพียงสร้างการปฏิบัติการ หรือปฏิบัติในการสร้าง และเรียกใช้งาน ข้อผิดพลาดใด ๆ ที่เกิดขึ้นในระหว่างกระบวนการคอมไพล์จะแสดงบนแบบฟอร์ม

ข้อมูลเพิ่มเติม

ขั้นตอนที่ 1: ข้อกำหนด

  • visual Studio .NET หรือ Visual Studio 2005
  • คอมไพเลอร์ภาษา.NET visual Basic หรือคอมไพเลอร์ภาษา 2005 Visual Basic

ขั้นตอนที่ 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 CompilerResults

parameters.GenerateExecutable = True
parameters.OutputAssembly = Output
results = icc.CompileAssemblyFromSource(parameters, SourceText)
				

รหัสรับผิดข้างต้นใช้วัตถุ CompilerParameters เพื่อบอกคอมไพเลอร์ ที่คุณต้องการสร้างแฟ้มที่ปฏิบัติ (opposed ถึง 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
   Next
End If

				

ตัวเลือกอื่น ๆ สำหรับการคอมไพล์ เช่นการคอมไพล์จากแฟ้มได้ คุณยังสามารถชุดการคอมไพล์ ซึ่งหมายความว่า คุณสามารถคอมไพล์แฟ้มหรือแหล่งที่มาหลายรายการในเวลาเดียวกัน ข้อมูลเพิ่มเติมในคลาสที่เหล่านี้จะพร้อมใช้งานในแบบออนไลน์ของ MSDN:
http://msdn.microsoft.com/en-us/default.aspx

ขั้นตอนที่ 3: ตัวอย่างที่แสดง

  1. สร้าง Visual Basic .NET ใหม่หรือโปรแกรมประยุกต์ Windows 2005 ของ Visual Basic Form1 จะถูกสร้างขึ้นตามค่าเริ่มต้น
  2. ในหน้าต่างการดูรหัสของ Form1 แทนข้อความที่มีอยู่ทั้งหมด ด้วยรหัสต่อไปนี้:
    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
    					
    หมายเหตุ:รหัสควรเปลี่ยนแปลงใน Visual Basic 2005 ถ้าคุณสร้างฟอร์มใหม่ที่ชื่อ Form1 ใน Visual Basic 2005 คุณมีแฟ้ม Form1.vb สำหรับรหัสของคุณและแฟ้ม Form1.Designer.vb ที่ประกอบด้วยส่วนที่สร้างขึ้นโดยอัตโนมัติ ตัวออกแบบฟอร์ม Windows ใช้คำสำคัญบางส่วนเพื่อแบ่งการใช้งานของ Form1 เป็นแฟ้มแยกต่างหากที่สอง ซึ่งสามารถป้องกันรหัส emitted โปรแกรมออกจากการถูก interspersed ด้วยรหัสของคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการปรับปรุงภาษา Visual Basic 2005 แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
    .aspx http://msdn2.microsoft.com/en-us/library/ms379584 (vs.80)
    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับระดับชั้นบางส่วนและผู้ออกแบบฟอร์ม Windows แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  3. เรียกใช้โครงการ หลังจากที่ Form1 โหลด คลิกการการสร้างปุ่ม ขอให้สังเกตว่า คุณได้รับข้อผิดพลาดของคอมไพเลอร์สอง
  4. คัดถัดไป ลอกรหัสต่อไปนี้ลงในกล่องข้อความ การแทนที่ข้อความใด ๆ ที่มีอยู่:
    Imports System
    
    Module Module1
    
        Sub Main()
            Console.WriteLine("Hello World!")
            Console.WriteLine("Press ENTER")
            Console.ReadLine()
        End Sub
    
    End Module
    					
  5. คลิกการสร้างอีกครั้ง การคอมไพล์ควรเสร็จเรียบร้อยแล้ว
  6. คลิกเรียกใช้และจะคอมไพล์รหัส และเรียกใช้แฟ้มที่ปฏิบัติที่เป็นผลลัพธ์ การคอมไพล์สร้างแฟ้มที่ปฏิบัติที่เรียกว่า "Out.exe" ในโฟลเดอร์เดียวกันเป็นโปรแกรมประยุกต์ที่คุณกำลังเรียกใช้

    หมายเหตุ::คุณสามารถปรับเปลี่ยนรหัสที่อยู่ในกล่องข้อความเพื่อดูข้อผิดพลาดของคอมไพเลอร์ที่แตกต่างกัน ตัวอย่างเช่น ลบวงเล็บการอย่างใดอย่างหนึ่ง และรหัสการจัดทำใหม่
  7. lastly แก้ไขรหัสในกล่องข้อความจะแสดงผลบรรทัดอื่นของข้อความไปยังหน้าต่างคอนโซล คลิกเรียกใช้เมื่อต้องการดูผลลัพธ์

ข้อมูลอ้างอิง

คลาสของ VBCodeProvider
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbcodeprovider.aspx

อินเทอร์เฟซ ICodeCompiler
.aspx http://msdn.microsoft.com/en-us/library/system.codedom.compiler.icodecompiler (VS.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 304654 - รีวิวครั้งสุดท้าย: 10 มกราคม 2554 - Revision: 4.0
ใช้กับ
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web kbmt KB304654 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:304654

ให้ข้อเสนอแนะ

 

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