Cómo compilar código mediante programación utilizando el compilador de Visual Basic .NET o de Visual Basic 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 304654 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E304654
Para obtener una versión de este artículo para Microsoft Visual C# .NET, vea 304655.

Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.CodeDom.Compiler
Expandir todo | Contraer todo

En esta página

Resumen

.NET Framework expone clases que permiten tener acceso mediante programación al compilador del lenguaje de Visual Basic .NET o Visual Basic 2005. Esto también podría ser útil si desea escribir sus propias utilidades de compilación de código. En este artículo se proporciona código de ejemplo que permite compilar el código de un origen de texto. La aplicación permite generar la aplicación ejecutable o ejecutarla además de generarla. Cualquier error que aparezca durante el proceso de compilación se muestra en el formulario.

Más información

Paso 1: Requisitos

  • Visual Studio .NET o Visual Studio 2005
  • Compilador de lenguaje de Visual Basic .NET o compilador de lenguaje de Visual Basic 2005

Paso 2: cómo compilar código mediante programación

.NET Framework proporciona la interfaz de ejecución del compilador ICodeCompiler. La clase VBCodeProvider implementa esta interfaz y proporciona acceso a las instancias del generador de código y del compilador del código de Visual Basic. El ejemplo siguiente crea una instancia de VBCodeProvider y la utiliza para obtener una referencia a una interfaz ICodeCompiler.

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

Cuando tenga una referencia a una interfaz ICodeCompiler, puede utilizarla para compilar el código fuente. Los parámetros se pasan al compilador utilizando la clase CompilerParameters. A continuación puede ver un ejemplo:
Dim parameters As New CompilerParameters() Dim results As CompilerResults

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

El código anterior usa el objeto CompilerParameters para indicar al compilador que desea generar un archivo ejecutable (no una DLL) y que desea enviar el ensamblado resultante al disco. Al llamar a CompileAssemblyFromSource es cuando se compila el ensamblado. Este método toma su objeto de parámetros y el código fuente, que es una cadena. Cuando compila el código, puede comprobar si hubo algún error de compilación. Utilizamos el valor devuelto por CompileAssemblyFromSource, que es un objeto CompilerResults. Este objeto contiene una colección de errores que contiene cualquier error que apareciera durante la compilación.
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

				

Hay otras opciones para compilar, como hacerlo desde un archivo. También puede compilar en lotes, lo que significa que puede compilar al mismo tiempo varios archivos u orígenes. En MSDN Online hay información adicional sobre estas clases:
http://search.microsoft.com/?mkt=es-es

Paso 3: ejemplo paso a paso

  1. Cree una nueva aplicación Windows de Visual Basic .NET o Visual Basic 2005. De manera predeterminada se creará Form1.
  2. En la ventana Vista Código de Form1, reemplace todo el texto existente con el código siguiente:
    Option Strict On Imports System.CodeDom.Compiler
    
    
    Public Class Form1 Inherits System.Windows.Forms.Form
    
    #Region " Código generado por el Diseñador de Windows Forms "
    
        Public Sub New() MyBase.New()
    
            'El Diseñador de Windows Forms requiere esta llamada. InitializeComponent()
    
            'Agregar la inicialización después de la llamada a InitializeComponent()
    
        End Sub
    
        'El formulario anula a Dispose para limpiar la lista de componentes. 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
    
        'Necesario para los componentes del Diseñador de Windows Forms As System.ComponentModel.Container
    
        'NOTA: El procedimiento siguiente es necesario para el Diseñador de Windows Forms 'Puede modificarse mediante el Diseñador de Windows Forms. 'No lo modifique con el editor de código. <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
    					
    Nota
    El código debe cambiarse en Visual Basic 2005. Si crea un nuevo formulario denominado Form1 en Visual Basic 2005, se genera un archivo Form1.vb para el código y un archivo Form1.Designer.vb que contiene la parte generada automáticamente. El Diseñador de Windows Forms utiliza la palabra clave partial para dividir la implementación de Form1 en dos archivos independientes. Esto evita que el código emitido por el diseñador se mezcle con el suyo. Para obtener más información acerca de las mejoras del lenguaje de Visual Basic 2005, visite el siguiente sitio Web de Microsoft:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnhcvs04/html/vs04k1.asp
    Para obtener más información acerca de las clases parciales y el Diseñador de Windows Forms, visite el siguiente sitio Web de Microsoft:
    http://msdn2.microsoft.com/es-es/library/ms171843(VS.80).aspx
  3. Ejecute el proyecto. Cuando se cargue Form1, haga clic en el botón Generar. Observe que obtiene un par de errores del compilador.
  4. Luego, copie el código siguiente en el cuadro de texto, reemplazando cualquier texto existente:
    Imports System
    
    Module Module1
    
        Sub Main() Console.WriteLine("Hello World!") Console.WriteLine("Press ENTER") Console.ReadLine() End Sub
    
    End Module
    					
  5. Haga clic de nuevo en Generar. La compilación debería tener éxito.
  6. Haga clic en Ejecutar y compilará el código y ejecutará el archivo ejecutable resultante. La compilación crea un archivo ejecutable llamado "Out.exe" en la misma carpeta que la aplicación que está ejecutando.

    NOTA
    Puede modificar el código en el cuadro de texto para ver diferentes errores del compilador. Por ejemplo, elimine uno de los paréntesis y regenere el código.
  7. Por último, modifique el código en el cuadro de texto para poner otra línea de texto en la ventana de la consola. Haga clic en Ejecutar para ver la salida.

Referencias

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

Interfaz ICodeCompiler
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemCodeDomCompilerICodeCompilerClassTopic.asp

Propiedades

Id. de artículo: 304654 - Última revisión: miércoles, 24 de enero de 2007 - Versión: 4.4
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Palabras clave: 
kbhowto kbbcl kbcompiler kbprod2web kbvs2005applies kbvs2005swept KB304654

Enviar comentarios

 

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