A compilar programaticamente código utilizando o compilador de Visual Basic .NET ou Visual Basic 2005

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 304654
Para obter uma Microsoft Visual C# .NET versão deste artigo, consulte 304655.

Este artigo faz referência à seguinte espaço de nomes Microsoft .NET Framework Class Library:
  • System.CodeDom.Compiler
Sumário
O .NET Framework expõe classes que permitem aceder programaticamente o Visual Basic .NET ou Visual Basic 2005 compilador de idioma. Pode também ser útil se pretender escrever os seus próprios utilitários de compilação de código. Este artigo fornece código de exemplo permite-lhe compilar código a partir de uma origem de texto. A aplicação permite-lhe o basta criar o ficheiro executável ou criar o ficheiro executável e executá-la. Quaisquer erros que ocorram durante o processo de compilação são apresentados no formulário.
Mais Informação

Passo 1: requisitos

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

Passo 2: Como através de programação compilar código

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

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

Quando tiver uma referência a uma interface ICodeCompiler, é possível utilizar para compilar o código de origem. Passar parâmetros para o compilador utilizando a classe CompilerParameters . Eis um exemplo:
Dim parameters As New CompilerParameters()Dim results As CompilerResultsparameters.GenerateExecutable = Trueparameters.OutputAssembly = Outputresults = icc.CompileAssemblyFromSource(parameters, SourceText)				

O código acima utiliza o objecto CompilerParameters para indicar o compilador de que pretende gerar um ficheiro executável (por oposição a uma DLL) e que pretende exportar a assemblagem resultante para o disco. A chamada para CompileAssemblyFromSource é onde a assemblagem é compilada. Este método utiliza o objecto de parâmetros e o código de origem, que é uma cadeia. Depois de compilar o código, pode verificar se ocorreram quaisquer erros de compilação. Utilizamos o valor devolvido de CompileAssemblyFromSource , que é um objecto CompilerResults . Este objecto contém uma colecção de erros, que contém quaisquer 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   NextEnd If				

Existem outras opções para compilar, tais como compilar a partir de um ficheiro. Também pode batch compilação, o que significa que pode compilar vários ficheiros ou origens ao mesmo tempo. Estão disponíveis no Web site MSDN online informações adicionais sobre estas classes:

Passo 3: Exemplo passo a passo

  1. Crie um novo Visual Basic .NET ou Visual Basic 2005 Windows Application. É criado o Form1 por predefinição.
  2. Na janela de vista de código do Form1, substitua todo o texto existente com o seguinte código:
    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					
    NOTA: deve ser alterado o código do Visual Basic 2005. Se criar um novo formulário é denominado Form1 do Visual Basic 2005, terá um ficheiro Form1.VB para o código e um ficheiro Form1.Designer.vb que contém a parte gerada automaticamente. O Windows Forms Designer utiliza a palavra-chave parcial para dividir a implementação do Form1 em dois ficheiros separados. Isto impede que código designer emite a ser intercalados com o código. Para obter mais informações sobre os melhoramentos de idioma do Visual Basic 2005, visite o seguinte Web site da Microsoft: Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte Web site da Microsoft:
  3. Execute o projecto. Depois do Form1 é carregado, clique no botão Compilar . Repare que receberá um par de erros do compilador.
  4. Em seguida, copie o código seguinte para a caixa de texto, substituir qualquer texto existente:
    Imports SystemModule Module1    Sub Main()        Console.WriteLine("Hello World!")        Console.WriteLine("Press ENTER")        Console.ReadLine()    End SubEnd Module					
  5. Clique em Compilar novamente. A compilação deve ser efectuada com êxito.
  6. Clique em Executar e irá compilar o código e execute o ficheiro executável resultante. A compilação cria um ficheiro executável denominado "Out.exe" na mesma pasta que a aplicação que está a ser executado.

    NOTA: Pode modificar código na caixa de texto para ver os erros do compilador diferente. Por exemplo, elimine dos parênteses e reconstruir o código.
  7. Finalmente, modifique o código na caixa de texto para outra linha de texto para a janela da consola de saída. Clique em Executar para ver os resultados.
ICodeCompiler CSharpCodeProvider CompilerParameters

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 304654 - Última Revisão: 05/11/2007 07:08:50 - Revisão: 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 KbMtpt
Comentários