Comment compiler par programme code en utilisant le compilateur Visual Basic .NET ou Visual Basic 2005

Traductions disponibles Traductions disponibles
Numéro d'article: 304654 - Voir les produits auxquels s'applique cet article
Pour une Visual c# .NET version de cet article, reportez-vous 304655.

Cet article fait référence à l'espace de noms bibliothèque de classes Microsoft .NET Framework suivant :
  • System.CodeDom.Compiler
Agrandir tout | Réduire tout

Sommaire

Résumé

Le .NET Framework expose des classes qui vous accéder par programme au Visual Basic .NET ou au compilateur de langage Visual Basic 2005. Cela peut également être utile si vous souhaitez écrire vos propres utilitaires compilation de code. Cet article fournit un exemple de code qui permet de compiler du code à partir d'une source de texte. L'application permet de pouvoir soit simplement générer le fichier exécutable ou générer l'exécutable et l'exécuter. Les erreurs qui se produisent pendant le processus de compilation sont affichés sur le formulaire.

Plus d'informations

L'étape 1: configuration requise

  • Visual Studio .NET ou Visual Studio 2005
  • Compilateur du langage Visual Basic .NET ou de compilateur de langage Visual Basic 2005

Étape 2: Comment compiler du code par programme

Le .NET Framework fournit l'interface de l'exécution du compilateur ICodeCompiler. VBCodeProvider (classe) implémente cette interface et donne accès aux instances du Générateur de code Visual Basic et du compilateur de code. L'exemple suivant crée une instance de la VBCodeProvider et l'utilise pour obtenir une référence à une interface ICodeCompiler.

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

Une fois que vous avez une référence à une interface ICodeCompiler, vous pouvez l'utiliser pour compiler votre code source. Vous passez des paramètres au compilateur en utilisant la classe CompilerParameters . Voici un exemple :
Dim parameters As New CompilerParameters()
Dim results As CompilerResults

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

Le code ci-dessus utilise l'objet CompilerParameters pour indiquer au compilateur que vous souhaitez générer un fichier exécutable (par opposition à une DLL) et que vous souhaitez copier l'assembly résultant sur le disque. L'appel à CompileAssemblyFromSource est où votre assembly obtient compilé. Cette méthode prend l'objet de paramètres et le code source, qui est une chaîne. Une fois que vous compilez votre code vous pouvez vérifier si des erreurs de compilation. Nous utiliser la valeur de retour de CompileAssemblyFromSource , qui est un objet CompilerResults . Cet objet contient une collection d'erreurs, qui contient les éventuelles erreurs survenues pendant la compilation.
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

				

Il existe autres options de compilation, telles que la compilation à partir d'un fichier. Vous pouvez également lot compiler, ce qui signifie que vous pouvez compiler plusieurs fichiers ou des sources en même temps. Des informations supplémentaires sur ces classes sont disponibles sur MSDN Online :
http://msdn.microsoft.com/en-us/default.aspx

À l'étape 3 : Exemple pas à pas

  1. Créer un nouveau Visual Basic .NET ou Visual Basic 2005 Windows Application. Form1 est créé par défaut.
  2. Dans la fenêtre Affichage du code de Form1, remplacez tout le texte existant par le code suivant :
    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
    					
    Remarque le code doit être modifié dans Visual Basic 2005. Si vous créez un nouveau formulaire appelé Form1 dans Visual Basic 2005, vous avez un fichier Form1.vb pour votre code et un fichier Form1.Designer.vb qui contient la partie automatiquement générée. Le Concepteur Windows Forms utilise le mot clé partial pour diviser l'implémentation de Form1 en deux fichiers distincts. Cela empêche le code émis par le Concepteur de parsemés dans votre code. Pour plus d'informations sur les améliorations du langage Visual Basic 2005, site Web Microsoft suivant :
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Pour plus d'informations sur le Concepteur Windows Forms et les classes partielles, site Web Microsoft suivant :
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  3. Exécutez le projet. Une fois chargé de Form1, cliquez sur le bouton Générer . Notez que vous obtenez quelques erreurs du compilateur.
  4. Ensuite, copiez le code suivant dans la zone de texte, remplacer n'importe quel texte existant :
    Imports System
    
    Module Module1
    
        Sub Main()
            Console.WriteLine("Hello World!")
            Console.WriteLine("Press ENTER")
            Console.ReadLine()
        End Sub
    
    End Module
    					
  5. Cliquez à nouveau sur Générer . La compilation doit réussir.
  6. Cliquez sur Exécuter et compiler le code et exécutez le fichier exécutable obtenu. La compilation crée un fichier exécutable nommé «Out.exe» dans le même dossier que l'application en cours d'exécution.

    Remarque : Vous pouvez modifier le code dans la zone de texte pour afficher les erreurs de compilation différents. Par exemple, supprimez une des parenthèses et reconstruire le code.
  7. Enfin, modifiez le code dans la zone de texte pour une autre ligne de texte dans la fenêtre de console. Cliquez sur Exécuter pour voir le résultat.

Références

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

Propriétés

Numéro d'article: 304654 - Dernière mise à jour: vendredi 11 mai 2007 - Version: 4.7
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft .NET Framework 1.0
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbmt kbvs2005applies kbvs2005swept kbbcl kbcompiler kbhowto kbprod2web KB304654 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 304654
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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