Как программно компилировать код с помощью Visual Basic.NET или Visual Basic 2005 компилятор

Переводы статьи Переводы статьи
Код статьи: 304654 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft Visual C#.NET версии статьи, см. 304655.

В данной статье относится следующие корпорации Майкрософт.Библиотека классов NET Framework пространства имен:
  • Имен System.CodeDom.Compiler
Развернуть все | Свернуть все

В этой статье

Аннотация

.NET Framework предоставляет классы, позволяющие программный доступ к Visual Basic.NET или Visual Basic 2005 компилятор языка. Это может также будет полезно, если вы хотите писать собственные средства компиляции кода. Это статья содержит пример кода, которая позволяет скомпилировать код из текста источник. Приложение позволяет просто сборки исполняемого файла или сборки исполняемый файл и запустите его. Все ошибки, возникающие во время компиляции отображаются на форме.

Дополнительная информация

Шаг 1: требования

  • Visual Studio.NET или Visual Studio 2005
  • Visual Basic.Компилятор языка NET или компилятор языка Visual Basic 2005

Шаг 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 — где получает скомпилированные сборки. Этот метод принимает ваш параметры объекта и исходный код, который является строкой. После компиляции в можно проверить, см. в случае обнаружения ошибок компиляции кода. Мы используем Возвращаемое значение от 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 Online:
http://MSDN.Microsoft.com/en-US/Default.aspx

Шаг 3: Представленный пример

  1. Создайте новый проект Visual Basic.NET или приложения Windows Visual Basic 2005. Форма 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 Forms использует ключевое слово partial разделить на два отдельных файла реализации класса Form1. Это предотвращает созданный конструктором код перемежаемых кода. Для получения дополнительных сведений о усовершенствований языка Visual Basic 2005 посетите следующий веб-узел корпорации Майкрософт:
    http://msdn2.Microsoft.com/en-us/library/ms379584 (vs.80) .aspx
    Для получения дополнительных сведений о разделяемых классов и в конструкторе Windows Forms посетите следующий веб-узел корпорации Майкрософт:
    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. Наконец измените код в текстовое поле в другой выходной Строка текста в окно консоли. Нажмите кнопку Запустить Чтобы увидеть результат.

Ссылки

Класс VBCodeProvider
http://MSDN.Microsoft.com/en-us/library/Microsoft.VisualBasic.vbcodeprovider.aspx

Интерфейс ICodeCompiler
http://MSDN.Microsoft.com/en-us/library/System.CodeDom.Compiler.ICodeCompiler (VS.71) .aspx

Свойства

Код статьи: 304654 - Последний отзыв: 6 июня 2011 г. - 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
Ключевые слова: 
kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web kbmt KB304654 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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