Como compilar código programaticamente usando o compilador Visual Basic .NET ou Visual Basic 2005

Traduções deste artigo Traduções deste artigo
ID do artigo: 304654 - Exibir os produtos aos quais esse artigo se aplica.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 304655.

Este artigo se refere ao seguinte namespace Microsoft .NET Framework Class Library:
  • System.CodeDom.Compiler
Expandir tudo | Recolher tudo

Neste artigo

Sumário

O .NET Framework expõe classes que permitem o acesso através de programação Visual Basic .NET ou compilador de linguagem do Visual Basic 2005. Isso também pode ser útil se você deseja gravar seus próprios utilitários compilar código. Este artigo fornece código de exemplo que permite que você compilar o código de uma fonte de texto. O aplicativo permite ou apenas criar o arquivo executável ou criar o arquivo executável e executá-lo. Quaisquer erros que ocorram durante o processo de compilação são exibidos no formulário.

Mais Informações

Etapa 1: requisitos

  • O Visual Studio .NET ou Visual Studio 2005
  • Compilador de linguagem do Visual Basic .NET ou o compilador de linguagem do Visual Basic 2005

Etapa 2: Como programaticamente compile código

O .NET Framework fornece a interface de execução do compilador ICodeCompiler. Classe VBCodeProvider implementa essa interface e fornece acesso às instâncias do gerador de código do Visual Basic e do compilador código. O exemplo a seguir cria uma instância do VBCodeProvider e o usa para obter uma referência a uma interface ICodeCompiler.

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

Depois de ter uma referência a uma interface ICodeCompiler, você pode usá-lo para compilar seu código-fonte. Você passa parâmetros para o compilador usando a classe CompilerParameters . Aqui está um exemplo:
Dim parameters As New CompilerParameters()
Dim results As CompilerResults

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

O código acima usa o objeto CompilerParameters para informar ao compilador que você deseja gerar um arquivo executável (em oposição a uma DLL) e que você deseja que o assembly resultante para o disco de saída. A chamada para CompileAssemblyFromSource é onde o assembly é compilado. Este método usa o objeto de parâmetros e o código-fonte, que é uma seqüência de caracteres. Quando você compilar seu código você pode verificar para ver se houve quaisquer erros de compilação. Usamos o valor retorno do CompileAssemblyFromSource , que é um objeto CompilerResults . Este objeto contém uma coleção de erros, que contém erros que ocorreram durante a compilação.
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

				

Há outras opções para compilação, como a compilação de um arquivo. Você também pode lote compilação, o que significa que você pode compilar vários arquivos ou fontes ao mesmo tempo. Informações adicionais sobre essas classes estão disponíveis no MSDN online:
http://msdn.microsoft.com/en-us/default.aspx

Etapa 3: Exemplo passo a passo

  1. Crie um novo Visual Basic .NET ou Visual Basic 2005 Windows Application. O Form1 é criado por padrão.
  2. Na janela de exibição de código do Form1, substitua todo o texto existente com o seguinte código:
    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
    					
    Observação O código deve ser alterado no Visual Basic 2005. Se você criar um novo formulário é denominado Form1 no Visual Basic 2005, você tem um arquivo Form1.vb para seu código e um arquivo Form1.Designer.vb que contém a parte gerada automaticamente. O Windows Forms Designer usa a palavra-chave partial para dividir a implementação de Form1 em dois arquivos separados. Isso impede que o código emitido designer sendo intercaladas com seu código. Para obter mais informações sobre os aprimoramentos de linguagem do Visual Basic 2005, visite o seguinte site:
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  3. Execute o projeto. Depois de Form1 é carregado, clique no botão Construir . Observe que você obtenha alguns erros do compilador.
  4. Em seguida, copie o seguinte código na caixa de texto, substituindo qualquer texto existente:
    Imports System
    
    Module Module1
    
        Sub Main()
            Console.WriteLine("Hello World!")
            Console.WriteLine("Press ENTER")
            Console.ReadLine()
        End Sub
    
    End Module
    					
  5. Clique em Construir novamente. A compilação deve ser bem-sucedida.
  6. Clique em Executar e ele irá compilar o código e execute o arquivo executável resultante. A compilação cria um arquivo executável chamado "Out.exe" na mesma pasta como o aplicativo que você está executando.

    Observação: Você pode modificar o código na caixa de texto para ver erros do compilador diferentes. Por exemplo, excluir um dos parênteses e recriar o código.
  7. Por fim, modifique o código na caixa de texto outra linha de texto na janela do console de saída. Clique em Executar para ver a saída.

Referências

Classe VBCodeProvider
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbcodeprovider.aspx

Interface ICodeCompiler
http://msdn.microsoft.com/en-us/library/system.codedom.compiler.icodecompiler(VS.71).aspx

Propriedades

ID do artigo: 304654 - Última revisão: sexta-feira, 11 de maio de 2007 - Revisão: 4.7
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palavras-chave: 
kbmt kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web KB304654 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 304654

Submeter comentários

 

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