HOWTO: Visual Basic .NET 컴파일러를 사용하여 프로그래밍 방식으로 코드 컴파일하기

기술 자료 번역 기술 자료 번역
기술 자료: 304654 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR304654
이 문서의 Microsoft C# .NET 버전에 대한 내용은 304655를 참조하십시오.
모두 확대 | 모두 축소

이 페이지에서

요약

.NET Framework에서는 Visual Basic .NET 언어 컴파일러에 프로그래밍 방식으로 액세스할 수 있게 해주는 클래스를 제공합니다. 언어 컴파일러는 또한 사용자 자신의 코드 컴파일링 유틸리티를 작성할 때도 유용합니다. 이 문서는 텍스트 원본에서 코드를 컴파일할 수 있도록 예제 코드를 제공합니다. 응용 프로그램을 사용하여 실행 파일을 작성하거나, 실행 파일을 작성 및 실행할 수 있습니다. 컴파일 과정에서 발생하는 오류는 모두 폼에 표시됩니다.

추가 정보

1단계: 요구 사항

  • Visual Studio .NET
  • Visual Basic .NET 언어 컴파일러

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 개체를 사용하여 (DLL에 대조적으로) 실행 파일을 생성하고 결과로 생기는 어셈블리를 디스크로 출력할 것임을 컴파일러에 알립니다. CompileAssemblyFromSource 호출은 어셈블리가 컴파일되는 위치를 나타냅니다. 이 메서드는 문자열에 해당하는 매개 변수 개체와 원시 코드를 사용합니다. 코드를 컴파일했으면 컴파일 오류가 있는지 확인할 수 있습니다. 이 예에서는 CompilerResults 개체에 해당하는 CompileAssemblyFromSource의 반환 값을 사용합니다. 이 개체에는 오류 컬렉션이 포함되어 있는데 여기에는 컴파일하는 동안 발생한 오류가 모두 포함되어 있습니다.
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://search.microsoft.com/us/dev/default.asp

3단계: 단계별 예제

  1. 새로운 Visual Basic .NET Windows 응용 프로그램을 만듭니다. 기본적으로 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
  3. 프로젝트를 실행합니다. Form1이 로드되면 Build 단추를 누릅니다. 두 개의 컴파일러 오류가 발생한 것을 확인할 수 있습니다.
  4. 그 다음, 아래의 코드를 텍스트 상자에 복사하여 기존 텍스트를 바꿉니다.
    Imports System
    
    Module Module1
    
        Sub Main()
            Console.WriteLine("Hello World!")
            Console.WriteLine("Press ENTER")
            Console.ReadLine()
        End Sub
    
    End Module
  5. Build를 다시 누릅니다. 성공적으로 컴파일됩니다.
  6. Run을 누르면 코드가 컴파일되고 그 결과로 실행 파일이 실행됩니다. 실행 중인 응용 프로그램과 같은 폴더에 "Out.exe"라는 실행 파일이 만들어집니다.

    참고: 텍스트 상자의 코드를 수정하여 다른 컴파일러 오류를 확인할 수 있습니다. 예를 들어, 괄호 중 하나를 삭제하고 코드를 다시 작성합니다.
  7. 마지막으로 텍스트 상자의 코드를 수정하여 다른 텍스트 줄이 콘솔 창으로 출력되게 합니다. Run을 눌러 출력 결과를 확인합니다.

참조

VBCodeProvider 클래스
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfMicrosoftVisualBasicVBCodeProviderClassTopic.asp

ICodeCompiler 인터페이스
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemCodeDomCompilerICodeCompilerClassTopic.asp

속성

기술 자료: 304654 - 마지막 검토: 2004년 3월 4일 목요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft .NET Framework Software Development Kit 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
키워드:?
kbhowto kbbcl kbcompiler kbprod2web KB304654

피드백 보내기

 

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