你目前正处于脱机状态,正在等待 Internet 重新连接

你的浏览器不受支持

你需要更新你的浏览器才能使用该网站。

更新到 Internet Explorer 的最新版本

如何以编程方式通过使用编译器,Visual Basic.net 或 Visual Basic 2005 中编译代码

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 304654
为这篇文章的一个 Microsoft Visual C#.net 版本,请参阅 304655

下面的 Microsoft.net 框架类库命名空间引用这篇文章:
  • System.CodeDom.Compiler
概要
.NET 框架公开允许您以编程方式访问 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 CompilerResultsparameters.GenerateExecutable = Trueparameters.OutputAssembly = Outputresults = 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   NextEnd If				

有用于编译,如编译文件中的其他选项。您也可以批处理编译,这意味着您可以编译多个文件或多个源一次。这些类的其他信息是 MSDN Online 上的可用:

步骤 3: 分步示例

  1. 创建新的 Visual Basic.net 或 Visual Basic 2005 Windows 应用程序。默认情况下创建 Form1。
  2. Form1 代码视图窗口中替换所有现有的文本与下面的代码:
    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					
    注释 的代码应更改在 Visual Basic 2005 中。如果创建了一个名为 Form1 在 Visual Basic 2005 中的新窗体必须 Form1.vb 文件为您的代码和一个 Form1.Designer.vb 文件,其中包含自动生成的一部分。Windows 窗体设计器使用 partial 关键字将 Form1 的实现划分为两个单独的文件。这样可以防止在设计器发出的代码正在与您的代码交错。有关 Visual Basic 2005 语言增强功能的详细信息,请访问下面的 Microsoft 网站:有关分部类和 Windows 窗体设计器的详细信息请访问下面的 Microsoft 网站:
  3. 运行该项目。Form1 加载后,单击 生成器 按钮。请注意您有几个编译器错误。
  4. 接下来,将下面的代码复制到文本框替换任何现有的文本:
    Imports SystemModule Module1    Sub Main()        Console.WriteLine("Hello World!")        Console.WriteLine("Press ENTER")        Console.ReadLine()    End SubEnd Module					
  5. 再次单击 生成器。编译应成功。
  6. 单击 运行,它将编译代码并运行所生成的可执行文件。编译将创建一个称为"Out.exe"与您所运行的应用程序相同的文件夹中的可执行文件。

    注:您可以修改代码,以查看不同的编译器错误文本框中。例如对于删除在括号之一,并重新生成代码。
  7. 最后,修改代码,在文本框中输出到控制台窗口的文本的另一条直线。单击 $ 运行 以查看输出。
ICodeCompiler CSharpCodeProvider CompilerParameters

警告:本文已自动翻译

属性

文章 ID:304654 - 上次审阅时间:05/11/2007 07:08:50 - 修订版本: 4.7

  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
  • kbmt kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web KB304654 KbMtzh
反馈