Bagikan melalui


CodeDomProvider Kelas

Definisi

Menyediakan kelas dasar untuk CodeDomProvider implementasi. Kelas ini abstrak.

public ref class CodeDomProvider abstract : System::ComponentModel::Component
public abstract class CodeDomProvider : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CodeDomProvider : System.ComponentModel.Component
type CodeDomProvider = class
    inherit Component
[<System.Runtime.InteropServices.ComVisible(true)>]
type CodeDomProvider = class
    inherit Component
Public MustInherit Class CodeDomProvider
Inherits Component
Warisan
Turunan
Atribut

Contoh

Contoh program berikut dapat menghasilkan dan mengompilasi kode sumber berdasarkan model CodeDOM dari program yang mencetak "Halo Dunia" menggunakan Console kelas . Antarmuka pengguna Windows Forms disediakan. Pengguna dapat memilih bahasa pemrograman target dari beberapa pilihan: C#, Visual Basic, dan JScript.

#using <System.Windows.Forms.dll>
#using <System.Drawing.dll>
#using <System.dll>
#using <Microsoft.JScript.dll>

using namespace System;
using namespace System::CodeDom;
using namespace System::CodeDom::Compiler;
using namespace System::Collections;
using namespace System::ComponentModel;
using namespace System::Diagnostics;
using namespace System::Drawing;
using namespace System::IO;
using namespace System::Windows::Forms;
using namespace Microsoft::CSharp;
using namespace Microsoft::VisualBasic;
using namespace Microsoft::JScript;
using namespace System::Security::Permissions;

// This example demonstrates building a Hello World program graph 
// using System.CodeDom elements. It calls code generator and
// code compiler methods to build the program using CSharp, VB, or
// JScript.  A Windows Forms interface is included. Note: Code
// must be compiled and linked with the Microsoft.JScript assembly. 
namespace CodeDOMExample
{
    [PermissionSet(SecurityAction::Demand, Name="FullTrust")]
    public ref class CodeDomExample
    {
    public:
        // Build a Hello World program graph using 
        // System::CodeDom types.
        static CodeCompileUnit^ BuildHelloWorldGraph()
        {
            // Create a new CodeCompileUnit to contain 
            // the program graph.
            CodeCompileUnit^ compileUnit = gcnew CodeCompileUnit;

            // Declare a new namespace called Samples.
            CodeNamespace^ samples = gcnew CodeNamespace( "Samples" );

            // Add the new namespace to the compile unit.
            compileUnit->Namespaces->Add( samples );

            // Add the new namespace import for the System namespace.
            samples->Imports->Add( gcnew CodeNamespaceImport( "System" ) );

            // Declare a new type called Class1.
            CodeTypeDeclaration^ class1 = gcnew CodeTypeDeclaration( "Class1" );

            // Add the new type to the namespace's type collection.
            samples->Types->Add( class1 );

            // Declare a new code entry point method.
            CodeEntryPointMethod^ start = gcnew CodeEntryPointMethod;

            // Create a type reference for the System::Console class.
            CodeTypeReferenceExpression^ csSystemConsoleType = gcnew CodeTypeReferenceExpression( "System.Console" );

            // Build a Console::WriteLine statement.
            CodeMethodInvokeExpression^ cs1 = gcnew CodeMethodInvokeExpression( csSystemConsoleType,"WriteLine", gcnew CodePrimitiveExpression("Hello World!") );

            // Add the WriteLine call to the statement collection.
            start->Statements->Add( cs1 );

            // Build another Console::WriteLine statement.
            CodeMethodInvokeExpression^ cs2 = gcnew CodeMethodInvokeExpression( csSystemConsoleType,"WriteLine", gcnew CodePrimitiveExpression( "Press the Enter key to continue." ) );

            // Add the WriteLine call to the statement collection.
            start->Statements->Add( cs2 );

            // Build a call to System::Console::ReadLine.
            CodeMethodReferenceExpression^ csReadLine = gcnew CodeMethodReferenceExpression( csSystemConsoleType, "ReadLine" );
            CodeMethodInvokeExpression^ cs3 = gcnew CodeMethodInvokeExpression( csReadLine, gcnew array<CodeExpression^>(0) );

            // Add the ReadLine statement.
            start->Statements->Add( cs3 );

            // Add the code entry point method to
            // the Members collection of the type.
            class1->Members->Add( start );
            return compileUnit;
        }

        static void GenerateCode( CodeDomProvider^ provider, CodeCompileUnit^ compileunit )
        {
            // Build the source file name with the appropriate
            // language extension.
            String^ sourceFile;
            if ( provider->FileExtension->StartsWith( "." ) )
            {
                sourceFile = String::Concat( "TestGraph", provider->FileExtension );
            }
            else
            {
                sourceFile = String::Concat( "TestGraph.", provider->FileExtension );
            }

            // Create an IndentedTextWriter, constructed with
            // a StreamWriter to the source file.
            IndentedTextWriter^ tw = gcnew IndentedTextWriter( gcnew StreamWriter( sourceFile,false ),"    " );

            // Generate source code using the code generator.
            provider->GenerateCodeFromCompileUnit( compileunit, tw, gcnew CodeGeneratorOptions );

            // Close the output file.
            tw->Close();
        }

        static CompilerResults^ CompileCode( CodeDomProvider^ provider, String^ sourceFile, String^ exeFile )
        {
            // Configure a CompilerParameters that links System.dll
            // and produces the specified executable file.
            array<String^>^referenceAssemblies = {"System.dll"};
            CompilerParameters^ cp = gcnew CompilerParameters( referenceAssemblies,exeFile,false );

            // Generate an executable rather than a DLL file.
            cp->GenerateExecutable = true;

            // Invoke compilation.
            CompilerResults^ cr = provider->CompileAssemblyFromFile( cp, sourceFile );

            // Return the results of compilation.
            return cr;
        }
    };

    public ref class CodeDomExampleForm: public System::Windows::Forms::Form
    {
    private:
        static System::Windows::Forms::Button^ run_button = gcnew System::Windows::Forms::Button;
        static System::Windows::Forms::Button^ compile_button = gcnew System::Windows::Forms::Button;
        static System::Windows::Forms::Button^ generate_button = gcnew System::Windows::Forms::Button;
        static System::Windows::Forms::TextBox^ textBox1 = gcnew System::Windows::Forms::TextBox;
        static System::Windows::Forms::ComboBox^ comboBox1 = gcnew System::Windows::Forms::ComboBox;
        static System::Windows::Forms::Label^ label1 = gcnew System::Windows::Forms::Label;
        void generate_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
        {
            CodeDomProvider^ provider = GetCurrentProvider();
            CodeDomExample::GenerateCode( provider, CodeDomExample::BuildHelloWorldGraph() );

            // Build the source file name with the appropriate
            // language extension.
            String^ sourceFile;
            if ( provider->FileExtension->StartsWith( "." ) )
            {
                sourceFile = String::Concat( "TestGraph", provider->FileExtension );
            }
            else
            {
                sourceFile = String::Concat( "TestGraph.", provider->FileExtension );
            }


            // Read in the generated source file and
            // display the source text.
            StreamReader^ sr = gcnew StreamReader( sourceFile );
            textBox1->Text = sr->ReadToEnd();
            sr->Close();
        }

        CodeDomProvider^ GetCurrentProvider()
        {
            CodeDomProvider^ provider;
            if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "CSharp" ) == 0 )
                provider = CodeDomProvider::CreateProvider("CSharp");
            else
                if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "Visual Basic" ) == 0 )
                    provider = CodeDomProvider::CreateProvider("VisualBasic");
                else
                    if ( String::Compare( dynamic_cast<String^>(this->comboBox1->SelectedItem), "JScript" ) == 0 )
                        provider = CodeDomProvider::CreateProvider("JScript");
                    else
                        provider = CodeDomProvider::CreateProvider("CSharp");

            return provider;
        }

        void compile_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
        {
            CodeDomProvider^ provider = GetCurrentProvider();

            // Build the source file name with the appropriate
            // language extension.
            String^ sourceFile = String::Concat( "TestGraph.", provider->FileExtension );

            // Compile the source file into an executable output file.
            CompilerResults^ cr = CodeDomExample::CompileCode( provider, sourceFile, "TestGraph.exe" );
            if ( cr->Errors->Count > 0 )
            {
                // Display compilation errors.
                textBox1->Text = String::Concat( "Errors encountered while building ", sourceFile, " into ", cr->PathToAssembly, ": \r\n\n" );
                System::CodeDom::Compiler::CompilerError^ ce;
                for ( int i = 0; i < cr->Errors->Count; i++ )
                {
                    ce = cr->Errors[i];
                    textBox1->AppendText( String::Concat( ce->ToString(), "\r\n" ) );

                }
                run_button->Enabled = false;
            }
            else
            {
                textBox1->Text = String::Concat( "Source ", sourceFile, " built into ", cr->PathToAssembly, " with no errors." );
                run_button->Enabled = true;
            }
        }

        void run_button_Click( Object^ /*sender*/, System::EventArgs^ /*e*/ )
        {
            Process::Start( "TestGraph.exe" );
        }

    public:
        CodeDomExampleForm()
        {
            this->SuspendLayout();

            // Set properties for label1.
            this->label1->Location = System::Drawing::Point( 395, 20 );
            this->label1->Size = System::Drawing::Size( 180, 22 );
            this->label1->Text = "Select a programming language:";

            // Set properties for comboBox1.
            this->comboBox1->Location = System::Drawing::Point( 560, 16 );
            this->comboBox1->Size = System::Drawing::Size( 190, 23 );
            this->comboBox1->Name = "comboBox1";
            array<String^>^temp1 = {"CSharp","Visual Basic","JScript"};
            this->comboBox1->Items->AddRange( temp1 );
            this->comboBox1->Anchor = (System::Windows::Forms::AnchorStyles)(System::Windows::Forms::AnchorStyles::Left | System::Windows::Forms::AnchorStyles::Right | System::Windows::Forms::AnchorStyles::Top);
            this->comboBox1->SelectedIndex = 0;

            // Set properties for generate_button.
            this->generate_button->Location = System::Drawing::Point( 8, 16 );
            this->generate_button->Name = "generate_button";
            this->generate_button->Size = System::Drawing::Size( 120, 23 );
            this->generate_button->Text = "Generate Code";
            this->generate_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::generate_button_Click );

            // Set properties for compile_button.
            this->compile_button->Location = System::Drawing::Point( 136, 16 );
            this->compile_button->Name = "compile_button";
            this->compile_button->Size = System::Drawing::Size( 120, 23 );
            this->compile_button->Text = "Compile";
            this->compile_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::compile_button_Click );

            // Set properties for run_button.
            this->run_button->Enabled = false;
            this->run_button->Location = System::Drawing::Point( 264, 16 );
            this->run_button->Name = "run_button";
            this->run_button->Size = System::Drawing::Size( 120, 23 );
            this->run_button->Text = "Run";
            this->run_button->Click += gcnew System::EventHandler( this, &CodeDomExampleForm::run_button_Click );

            // Set properties for textBox1.
            this->textBox1->Anchor = (System::Windows::Forms::AnchorStyles)(System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom | System::Windows::Forms::AnchorStyles::Left | System::Windows::Forms::AnchorStyles::Right);
            this->textBox1->Location = System::Drawing::Point( 8, 48 );
            this->textBox1->Multiline = true;
            this->textBox1->ScrollBars = System::Windows::Forms::ScrollBars::Vertical;
            this->textBox1->Name = "textBox1";
            this->textBox1->Size = System::Drawing::Size( 744, 280 );
            this->textBox1->Text = "";

            // Set properties for the CodeDomExampleForm.
            this->AutoScaleBaseSize = System::Drawing::Size( 5, 13 );
            this->ClientSize = System::Drawing::Size( 768, 340 );
            this->MinimumSize = System::Drawing::Size( 750, 340 );
            array<System::Windows::Forms::Control^>^myControl = {this->textBox1,this->run_button,this->compile_button,this->generate_button,this->comboBox1,this->label1};
            this->Controls->AddRange( myControl );
            this->Name = "CodeDomExampleForm";
            this->Text = "CodeDom Hello World Example";
            this->ResumeLayout( false );
        }

    public:
        ~CodeDomExampleForm()
        {
        }
    };

}

[STAThread]
int main()
{
    Application::Run( gcnew CodeDOMExample::CodeDomExampleForm );
}
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Microsoft.CSharp;
using Microsoft.VisualBasic;
using Microsoft.JScript;

// This example demonstrates building a Hello World program graph
// using System.CodeDom elements. It calls code generator and
// code compiler methods to build the program using CSharp, VB, or
// JScript.  A Windows Forms interface is included. Note: Code
// must be compiled and linked with the Microsoft.JScript assembly.
namespace CodeDOMExample
{
    class CodeDomExample
    {
        // Build a Hello World program graph using
        // System.CodeDom types.
        public static CodeCompileUnit BuildHelloWorldGraph()
        {
            // Create a new CodeCompileUnit to contain
            // the program graph.
            CodeCompileUnit compileUnit = new CodeCompileUnit();

            // Declare a new namespace called Samples.
            CodeNamespace samples = new CodeNamespace("Samples");
            // Add the new namespace to the compile unit.
            compileUnit.Namespaces.Add(samples);

            // Add the new namespace import for the System namespace.
            samples.Imports.Add(new CodeNamespaceImport("System"));

            // Declare a new type called Class1.
            CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
            // Add the new type to the namespace type collection.
            samples.Types.Add(class1);

            // Declare a new code entry point method.
            CodeEntryPointMethod start = new CodeEntryPointMethod();

            // Create a type reference for the System.Console class.
            CodeTypeReferenceExpression csSystemConsoleType = new CodeTypeReferenceExpression("System.Console");

            // Build a Console.WriteLine statement.
            CodeMethodInvokeExpression cs1 = new CodeMethodInvokeExpression(
                csSystemConsoleType, "WriteLine",
                new CodePrimitiveExpression("Hello World!"));

            // Add the WriteLine call to the statement collection.
            start.Statements.Add(cs1);

            // Build another Console.WriteLine statement.
            CodeMethodInvokeExpression cs2 = new CodeMethodInvokeExpression(
                csSystemConsoleType, "WriteLine",
                new CodePrimitiveExpression("Press the Enter key to continue."));

            // Add the WriteLine call to the statement collection.
            start.Statements.Add(cs2);

            // Build a call to System.Console.ReadLine.
            CodeMethodInvokeExpression csReadLine = new CodeMethodInvokeExpression(
                csSystemConsoleType, "ReadLine");

            // Add the ReadLine statement.
            start.Statements.Add(csReadLine);

            // Add the code entry point method to
            // the Members collection of the type.
            class1.Members.Add(start);

            return compileUnit;
        }

        public static void GenerateCode(CodeDomProvider provider,
            CodeCompileUnit compileunit)
        {
            // Build the source file name with the appropriate
            // language extension.
            String sourceFile;
            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "TestGraph" + provider.FileExtension;
            }
            else
            {
                sourceFile = "TestGraph." + provider.FileExtension;
            }

            // Create an IndentedTextWriter, constructed with
            // a StreamWriter to the source file.
            IndentedTextWriter tw = new IndentedTextWriter(new StreamWriter(sourceFile, false), "    ");
            // Generate source code using the code generator.
            provider.GenerateCodeFromCompileUnit(compileunit, tw, new CodeGeneratorOptions());
            // Close the output file.
            tw.Close();
        }

        public static CompilerResults CompileCode(CodeDomProvider provider,
                                                  String sourceFile,
                                                  String exeFile)
        {
            // Configure a CompilerParameters that links System.dll
            // and produces the specified executable file.
            String[] referenceAssemblies = { "System.dll" };
            CompilerParameters cp = new CompilerParameters(referenceAssemblies,
                                                           exeFile, false);
            // Generate an executable rather than a DLL file.
            cp.GenerateExecutable = true;

            // Invoke compilation.
            CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceFile);
            // Return the results of compilation.
            return cr;
        }
    }

    public class CodeDomExampleForm : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button run_button = new System.Windows.Forms.Button();
        private System.Windows.Forms.Button compile_button = new System.Windows.Forms.Button();
        private System.Windows.Forms.Button generate_button = new System.Windows.Forms.Button();
        private System.Windows.Forms.TextBox textBox1 = new System.Windows.Forms.TextBox();
        private System.Windows.Forms.ComboBox comboBox1 = new System.Windows.Forms.ComboBox();
        private System.Windows.Forms.Label label1 = new System.Windows.Forms.Label();

        private void generate_button_Click(object sender, System.EventArgs e)
        {
            CodeDomProvider provider = GetCurrentProvider();
            CodeDomExample.GenerateCode(provider, CodeDomExample.BuildHelloWorldGraph());

            // Build the source file name with the appropriate
            // language extension.
            String sourceFile;
            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "TestGraph" + provider.FileExtension;
            }
            else
            {
                sourceFile = "TestGraph." + provider.FileExtension;
            }

            // Read in the generated source file and
            // display the source text.
            StreamReader sr = new StreamReader(sourceFile);
            textBox1.Text = sr.ReadToEnd();
            sr.Close();
        }

        private void compile_button_Click(object sender, System.EventArgs e)
        {
            CodeDomProvider provider = GetCurrentProvider();

            // Build the source file name with the appropriate
            // language extension.
            String sourceFile;
            if (provider.FileExtension[0] == '.')
            {
                sourceFile = "TestGraph" + provider.FileExtension;
            }
            else
            {
                sourceFile = "TestGraph." + provider.FileExtension;
            }

            // Compile the source file into an executable output file.
            CompilerResults cr = CodeDomExample.CompileCode(provider,
                                                            sourceFile,
                                                            "TestGraph.exe");

            if (cr.Errors.Count > 0)
            {
                // Display compilation errors.
                textBox1.Text = "Errors encountered while building " +
                                sourceFile + " into " + cr.PathToAssembly + ": \r\n\n";
                foreach (CompilerError ce in cr.Errors)
                    textBox1.AppendText(ce.ToString() + "\r\n");
                run_button.Enabled = false;
            }
            else
            {
                textBox1.Text = "Source " + sourceFile + " built into " +
                                cr.PathToAssembly + " with no errors.";
                run_button.Enabled = true;
            }
        }

        private void run_button_Click(object sender,
            System.EventArgs e)
        {
            Process.Start("TestGraph.exe");
        }

        private CodeDomProvider GetCurrentProvider()
        {
            CodeDomProvider provider;
            switch ((string)this.comboBox1.SelectedItem)
            {
                case "CSharp":
                    provider = CodeDomProvider.CreateProvider("CSharp");
                    break;
                case "Visual Basic":
                    provider = CodeDomProvider.CreateProvider("VisualBasic");
                    break;
                case "JScript":
                    provider = CodeDomProvider.CreateProvider("JScript");
                    break;
                default:
                    provider = CodeDomProvider.CreateProvider("CSharp");
                    break;
            }
            return provider;
        }

        public CodeDomExampleForm()
        {
            this.SuspendLayout();
            // Set properties for label1
            this.label1.Location = new System.Drawing.Point(395, 20);
            this.label1.Size = new Size(180, 22);
            this.label1.Text = "Select a programming language:";
            // Set properties for comboBox1
            this.comboBox1.Location = new System.Drawing.Point(560, 16);
            this.comboBox1.Size = new Size(190, 23);
            this.comboBox1.Name = "comboBox1";
            this.comboBox1.Items.AddRange(new string[] { "CSharp", "Visual Basic", "JScript" });
            this.comboBox1.Anchor = System.Windows.Forms.AnchorStyles.Left
                                    | System.Windows.Forms.AnchorStyles.Right
                                    | System.Windows.Forms.AnchorStyles.Top;
            this.comboBox1.SelectedIndex = 0;
            // Set properties for generate_button.
            this.generate_button.Location = new System.Drawing.Point(8, 16);
            this.generate_button.Name = "generate_button";
            this.generate_button.Size = new System.Drawing.Size(120, 23);
            this.generate_button.Text = "Generate Code";
            this.generate_button.Click += new System.EventHandler(this.generate_button_Click);
            // Set properties for compile_button.
            this.compile_button.Location = new System.Drawing.Point(136, 16);
            this.compile_button.Name = "compile_button";
            this.compile_button.Size = new System.Drawing.Size(120, 23);
            this.compile_button.Text = "Compile";
            this.compile_button.Click += new System.EventHandler(this.compile_button_Click);
            // Set properties for run_button.
            this.run_button.Enabled = false;
            this.run_button.Location = new System.Drawing.Point(264, 16);
            this.run_button.Name = "run_button";
            this.run_button.Size = new System.Drawing.Size(120, 23);
            this.run_button.Text = "Run";
            this.run_button.Click += new System.EventHandler(this.run_button_Click);
            // Set properties for textBox1.
            this.textBox1.Anchor = (System.Windows.Forms.AnchorStyles.Top
                                     | System.Windows.Forms.AnchorStyles.Bottom
                                     | System.Windows.Forms.AnchorStyles.Left
                                     | System.Windows.Forms.AnchorStyles.Right);
            this.textBox1.Location = new System.Drawing.Point(8, 48);
            this.textBox1.Multiline = true;
            this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(744, 280);
            this.textBox1.Text = "";
            // Set properties for the CodeDomExampleForm.
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(768, 340);
            this.MinimumSize = new System.Drawing.Size(750, 340);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {this.textBox1,
                this.run_button, this.compile_button, this.generate_button,
                this.comboBox1, this.label1 });
            this.Name = "CodeDomExampleForm";
            this.Text = "CodeDom Hello World Example";
            this.ResumeLayout(false);
        }

        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }

        [STAThread]
        static void Main()
        {
            Application.Run(new CodeDomExampleForm());
        }
    }
}
Imports System.CodeDom
Imports System.CodeDom.Compiler
Imports System.Collections
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Drawing
Imports System.IO
Imports System.Windows.Forms
Imports Microsoft.CSharp
Imports Microsoft.JScript

' This example demonstrates building a Hello World program graph 
' using System.CodeDom elements. It calls code generator and
' code compiler methods to build the program using CSharp, VB, or
' JScript.  A Windows Forms interface is included. Note: Code
' must be compiled and linked with the Microsoft.JScript assembly. 
Namespace CodeDOMExample

    Class CodeDomExample
        ' Build a Hello World program graph using 
        ' System.CodeDom types.
        Public Shared Function BuildHelloWorldGraph() As CodeCompileUnit

            ' Create a new CodeCompileUnit to contain 
            ' the program graph.
            Dim compileUnit As New CodeCompileUnit()

            ' Declare a new namespace called Samples.
            Dim samples As New CodeNamespace("Samples")

            ' Add the new namespace to the compile unit.
            compileUnit.Namespaces.Add(samples)

            ' Add the new namespace import for the System namespace.
            samples.Imports.Add(New CodeNamespaceImport("System"))

            ' Declare a new type called Class1.
            Dim class1 As New CodeTypeDeclaration("Class1")

            ' Add the new type to the namespace type collection.
            samples.Types.Add(class1)

            ' Declare a new code entry point method.
            Dim start As New CodeEntryPointMethod()

            ' Create a type reference for the System.Console class.
            Dim csSystemConsoleType As New CodeTypeReferenceExpression( _
                "System.Console")

            ' Build a Console.WriteLine statement.
            Dim cs1 As New CodeMethodInvokeExpression( _
                csSystemConsoleType, "WriteLine", _
                New CodePrimitiveExpression("Hello World!"))

            ' Add the WriteLine call to the statement collection.
            start.Statements.Add(cs1)

            ' Build another Console.WriteLine statement.
            Dim cs2 As New CodeMethodInvokeExpression( _
                csSystemConsoleType, "WriteLine", _
                New CodePrimitiveExpression("Press the Enter key to continue."))

            ' Add the WriteLine call to the statement collection.
            start.Statements.Add(cs2)

            ' Build a call to System.Console.ReadLine.
            Dim csReadLine As New CodeMethodInvokeExpression( _
                csSystemConsoleType, "ReadLine")

            ' Add the ReadLine statement.
            start.Statements.Add(csReadLine)

            ' Add the code entry point method to
            ' the Members collection of the type.
            class1.Members.Add(start)

            Return compileUnit
        End Function

        Public Shared Sub GenerateCode(ByVal provider As CodeDomProvider, ByVal compileunit As CodeCompileUnit)

            ' Build the source file name with the appropriate
            ' language extension.
            Dim sourceFile As String
            If provider.FileExtension.StartsWith(".") Then
                sourceFile = "TestGraph" + provider.FileExtension
            Else
                sourceFile = "TestGraph." + provider.FileExtension
            End If

            ' Create an IndentedTextWriter, constructed with
            ' a StreamWriter to the source file.
            Dim tw As New IndentedTextWriter(New StreamWriter(sourceFile, False), "    ")
            ' Generate source code using the code generator.
            provider.GenerateCodeFromCompileUnit(compileunit, tw, New CodeGeneratorOptions())
            ' Close the output file.
            tw.Close()
        End Sub

        Public Shared Function CompileCode(ByVal provider As CodeDomProvider, _
                                           ByVal sourceFile As String, _
                                           ByVal exeFile As String) As CompilerResults

            ' Configure a CompilerParameters that links System.dll
            ' and produces the specified executable file.
            Dim referenceAssemblies As String() = {"System.dll"}
            Dim cp As New CompilerParameters(referenceAssemblies, exeFile, False)

            ' Generate an executable rather than a DLL file.
            cp.GenerateExecutable = True

            ' Invoke compilation.
            Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
                sourceFile)
            ' Return the results of compilation.
            Return cr
        End Function
    End Class

    Public Class CodeDomExampleForm
        Inherits System.Windows.Forms.Form
        Private run_button As New System.Windows.Forms.Button()
        Private compile_button As New System.Windows.Forms.Button()
        Private generate_button As New System.Windows.Forms.Button()
        Private textBox1 As New System.Windows.Forms.TextBox()
        Private comboBox1 As New System.Windows.Forms.ComboBox()
        Private label1 As New System.Windows.Forms.Label()

        Private Sub generate_button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim provider As CodeDomProvider = GetCurrentProvider()
            CodeDomExample.GenerateCode(provider, CodeDomExample.BuildHelloWorldGraph())

            ' Build the source file name with the appropriate
            ' language extension.
            Dim sourceFile As String
            If provider.FileExtension.StartsWith(".") Then
                sourceFile = "TestGraph" + provider.FileExtension
            Else
                sourceFile = "TestGraph." + provider.FileExtension
            End If

            ' Read in the generated source file and
            ' display the source text.
            Dim sr As New StreamReader(sourceFile)
            textBox1.Text = sr.ReadToEnd()
            sr.Close()
        End Sub

        Private Sub compile_button_Click(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim provider As CodeDomProvider = GetCurrentProvider()

            ' Build the source file name with the appropriate
            ' language extension.
            Dim sourceFile As String
            If provider.FileExtension.StartsWith(".") Then
                sourceFile = "TestGraph" + provider.FileExtension
            Else
                sourceFile = "TestGraph." + provider.FileExtension
            End If

            Dim cr As CompilerResults = CodeDomExample.CompileCode(provider, _
                                                                   sourceFile, _
                                                                   "TestGraph.EXE")

            If cr.Errors.Count > 0 Then
                ' Display compilation errors.
                textBox1.Text = "Errors encountered while building " + _
                                sourceFile + " into " + _
                                cr.PathToAssembly + ": " + ControlChars.CrLf

                Dim ce As System.CodeDom.Compiler.CompilerError
                For Each ce In cr.Errors
                    textBox1.AppendText(ce.ToString() + ControlChars.CrLf)
                Next ce
                run_button.Enabled = False
            Else
                textBox1.Text = "Source " + sourceFile + " built into " + _
                                cr.PathToAssembly + " with no errors."
                run_button.Enabled = True
            End If
        End Sub

        Private Sub run_button_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)

            Process.Start("TestGraph.EXE")
        End Sub

        Private Function GetCurrentProvider() As CodeDomProvider

            Dim provider As CodeDomProvider
            Select Case CStr(Me.comboBox1.SelectedItem)
                Case "CSharp"
                    provider = CodeDomProvider.CreateProvider("CSharp")
                Case "Visual Basic"
                    provider = CodeDomProvider.CreateProvider("VisualBasic")
                Case "JScript"
                    provider = CodeDomProvider.CreateProvider("JScript")
                Case Else
                    provider = CodeDomProvider.CreateProvider("CSharp")
            End Select
            Return provider
        End Function

        Public Sub New()
            Me.SuspendLayout()
            ' Set properties for label1.
            Me.label1.Location = New System.Drawing.Point(395, 20)
            Me.label1.Size = New Size(180, 22)
            Me.label1.Text = "Select a programming language:"
            ' Set properties for comboBox1.
            Me.comboBox1.Location = New System.Drawing.Point(560, 16)
            Me.comboBox1.Size = New Size(190, 23)
            Me.comboBox1.Name = "comboBox1"
            Me.comboBox1.Items.AddRange(New String() {"CSharp", "Visual Basic", "JScript"})
            Me.comboBox1.Anchor = System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right Or System.Windows.Forms.AnchorStyles.Top
            Me.comboBox1.SelectedIndex = 0
            ' Set properties for generate_button.
            Me.generate_button.Location = New System.Drawing.Point(8, 16)
            Me.generate_button.Name = "generate_button"
            Me.generate_button.Size = New System.Drawing.Size(120, 23)
            Me.generate_button.Text = "Generate Code"
            AddHandler generate_button.Click, AddressOf Me.generate_button_Click
            ' Set properties for compile_button.
            Me.compile_button.Location = New System.Drawing.Point(136, 16)
            Me.compile_button.Name = "compile_button"
            Me.compile_button.Size = New System.Drawing.Size(120, 23)
            Me.compile_button.Text = "Compile"
            AddHandler compile_button.Click, AddressOf Me.compile_button_Click
            ' Set properties for run_button.
            Me.run_button.Enabled = False
            Me.run_button.Location = New System.Drawing.Point(264, 16)
            Me.run_button.Name = "run_button"
            Me.run_button.Size = New System.Drawing.Size(120, 23)
            Me.run_button.Text = "Run"
            AddHandler run_button.Click, AddressOf Me.run_button_Click
            ' Set properties for textBox1.
            Me.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right
            Me.textBox1.Location = New System.Drawing.Point(8, 48)
            Me.textBox1.Multiline = True
            Me.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical
            Me.textBox1.Name = "textBox1"
            Me.textBox1.Size = New System.Drawing.Size(744, 280)
            Me.textBox1.Text = ""
            ' Set properties for the CodeDomExampleForm.
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(768, 340)
            Me.MinimumSize = New System.Drawing.Size(750, 340)
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.textBox1, _
                Me.run_button, Me.compile_button, Me.generate_button, _
                Me.comboBox1, Me.label1})
            Me.Name = "CodeDomExampleForm"
            Me.Text = "CodeDom Hello World Example"
            Me.ResumeLayout(False)
        End Sub

        Protected Overloads Sub Dispose(ByVal disposing As Boolean)
            MyBase.Dispose(disposing)
        End Sub

        <STAThread()> _
        Shared Sub Main()
            Application.Run(New CodeDomExampleForm())
        End Sub
    End Class
End Namespace

Keterangan

CodeDomProvider dapat digunakan untuk membuat dan mengambil instans generator kode dan pengkompilasi kode. Generator kode dapat digunakan untuk menghasilkan kode dalam bahasa tertentu, dan pengkompilasi kode dapat digunakan untuk mengkompilasi kode ke dalam rakitan.

Catatan

Dalam .NET Framework 2.0, metode yang disediakan dalam generator kode dan pengkompilasi kode tersedia langsung dari penyedia kode. Anda tidak perlu memanggil CreateGenerator atau CreateCompiler mengakses metode, dan metode tersebut ditandai sebagai usang. Ini berlaku untuk implementasi penyedia kode yang sudah ada sebelumnya serta baru.

CodeDomProvider Implementasi biasanya menyediakan pembuatan kode dan/atau antarmuka kompilasi kode untuk menghasilkan kode dan mengelola kompilasi untuk satu bahasa pemrograman. Beberapa bahasa didukung oleh CodeDomProvider implementasi yang dikirim dengan Windows SDK. Bahasa-bahasa ini termasuk C#, Visual Basic, C++, dan JScript. Pengembang atau vendor pengompilasi dapat mengimplementasikan ICodeGenerator antarmuka dan ICodeCompiler dan menyediakan CodeDomProvider yang memperluas dukungan CodeDOM ke bahasa pemrograman lainnya.

System.codedom<> Element dalam file konfigurasi mesin (Machine.config) menyediakan mekanisme bagi pengembang dan vendor pengompilasi untuk menambahkan pengaturan konfigurasi untuk implementasi tambahanCodeDomProvider.

Kelas ini CodeDomProvider menyediakan metode statis untuk menemukan dan menghitung implementasi CodeDomProvider di komputer. Metode GetAllCompilerInfo mengembalikan pengaturan untuk semua CodeDomProvider implementasi di komputer. Metode mengembalikan GetCompilerInfo pengaturan untuk implementasi tertentu CodeDomProvider , berdasarkan nama bahasa pemrograman. Metode mengembalikan CreateProvider instans CodeDomProvider implementasi untuk bahasa tertentu.

Untuk detail selengkapnya tentang pengaturan penyedia bahasa dalam file konfigurasi, lihat Skema Pengaturan Pengkompilasi dan Penyedia Bahasa.

Catatan

Kelas ini membuat permintaan tautan dan permintaan warisan di tingkat kelas. SecurityException akan dilemparkan jika penelepon langsung atau kelas turunan tidak memiliki izin kepercayaan penuh. Untuk detail tentang tuntutan keamanan, lihat Permintaan Tautan dan Permintaan Warisan.

Catatan Bagi Implementer

Dalam .NET Framework versi 1.0 dan 1.1, penyedia kode terdiri dari implementasi CodeDomProvider, , ICodeGeneratorICodeParser, dan ICodeCompiler. Dalam .NET Framework 2.0, CreateGenerator()metode , CreateParser(), dan CreateCompiler() sudah usang, dan metode ICodeGenerator dan ICodeCompiler langsung tersedia di CodeDomProvider kelas . Anda harus mengambil alih metode tersebut dalam implementasi penyedia kode Anda dan tidak memanggil metode dasar.

Konstruktor

CodeDomProvider()

Menginisialisasi instans baru kelas CodeDomProvider.

Properti

CanRaiseEvents

Mendapatkan nilai yang menunjukkan apakah komponen dapat menaikkan peristiwa.

(Diperoleh dari Component)
Container

IContainer Mendapatkan yang berisi Component.

(Diperoleh dari Component)
DesignMode

Mendapatkan nilai yang menunjukkan apakah Component saat ini dalam mode desain.

(Diperoleh dari Component)
Events

Mendapatkan daftar penanganan aktivitas yang dilampirkan ke ini Component.

(Diperoleh dari Component)
FileExtension

Mendapatkan ekstensi nama file default yang akan digunakan untuk file kode sumber dalam bahasa saat ini.

LanguageOptions

Mendapatkan pengidentifikasi fitur bahasa.

Site

Mendapatkan atau mengatur ISite dari Component.

(Diperoleh dari Component)

Metode

CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Mengkompilasi rakitan berdasarkan System.CodeDom pohon yang terkandung dalam array CodeCompileUnit objek yang ditentukan, menggunakan pengaturan pengkompilasi yang ditentukan.

CompileAssemblyFromFile(CompilerParameters, String[])

Mengkompilasi rakitan dari kode sumber yang terkandung dalam file yang ditentukan, menggunakan pengaturan pengkompilasi yang ditentukan.

CompileAssemblyFromSource(CompilerParameters, String[])

Mengkompilasi rakitan dari array string yang ditentukan yang berisi kode sumber, menggunakan pengaturan pengkompilasi yang ditentukan.

CreateCompiler()
Kedaluwarsa.
Kedaluwarsa.

Saat ditimpa di kelas turunan, membuat pengkompilasi kode baru.

CreateEscapedIdentifier(String)

Membuat pengidentifikasi escape untuk nilai yang ditentukan.

CreateGenerator()
Kedaluwarsa.
Kedaluwarsa.

Ketika ditimpa di kelas turunan, membuat generator kode baru.

CreateGenerator(String)

Saat ditimpa di kelas turunan, buat generator kode baru menggunakan nama file yang ditentukan untuk output.

CreateGenerator(TextWriter)

Ketika ditimpa di kelas turunan, membuat generator kode baru menggunakan yang ditentukan TextWriter untuk output.

CreateObjRef(Type)

Membuat objek yang berisi semua informasi relevan yang diperlukan untuk menghasilkan proksi yang digunakan untuk berkomunikasi dengan objek jarak jauh.

(Diperoleh dari MarshalByRefObject)
CreateParser()
Kedaluwarsa.
Kedaluwarsa.

Saat ditimpa di kelas turunan, membuat pengurai kode baru.

CreateProvider(String)

Mendapatkan instans CodeDomProvider untuk bahasa yang ditentukan.

CreateProvider(String, IDictionary<String,String>)

Mendapatkan instans CodeDomProvider untuk opsi bahasa dan penyedia yang ditentukan.

CreateValidIdentifier(String)

Membuat pengidentifikasi yang valid untuk nilai yang ditentukan.

Dispose()

Merilis semua sumber daya yang Componentdigunakan oleh .

(Diperoleh dari Component)
Dispose(Boolean)

Merilis sumber daya tidak terkelola yang Component digunakan oleh dan secara opsional merilis sumber daya terkelola.

(Diperoleh dari Component)
Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
GenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk unit kompilasi Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk ekspresi Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk deklarasi anggota Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk namespace Layanan Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk pernyataan Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions)

Menghasilkan kode untuk deklarasi jenis Code Document Object Model (CodeDOM) yang ditentukan dan mengirimkannya ke penulis teks yang ditentukan, menggunakan opsi yang ditentukan.

GetAllCompilerInfo()

Mengembalikan penyedia bahasa dan pengaturan konfigurasi pengkompilasi untuk komputer ini.

GetCompilerInfo(String)

Mengembalikan penyedia bahasa dan pengaturan konfigurasi pengkompilasi untuk bahasa yang ditentukan.

GetConverter(Type)

TypeConverter Mendapatkan untuk jenis data yang ditentukan.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetLanguageFromExtension(String)

Mengembalikan nama bahasa yang terkait dengan ekstensi nama file yang ditentukan, seperti yang dikonfigurasi di bagian CodeDomProvider konfigurasi pengkompilasi.

GetLifetimeService()
Kedaluwarsa.

Mengambil objek layanan seumur hidup saat ini yang mengontrol kebijakan seumur hidup untuk instans ini.

(Diperoleh dari MarshalByRefObject)
GetService(Type)

Mengembalikan objek yang mewakili layanan yang disediakan oleh Component atau oleh Container.

(Diperoleh dari Component)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetTypeOutput(CodeTypeReference)

Mendapatkan jenis yang ditunjukkan oleh yang ditentukan CodeTypeReference.

InitializeLifetimeService()
Kedaluwarsa.

Mendapatkan objek layanan seumur hidup untuk mengontrol kebijakan seumur hidup untuk instans ini.

(Diperoleh dari MarshalByRefObject)
IsDefinedExtension(String)

Menguji apakah ekstensi nama file memiliki implementasi terkait CodeDomProvider yang dikonfigurasi di komputer.

IsDefinedLanguage(String)

Menguji apakah bahasa memiliki implementasi yang CodeDomProvider dikonfigurasi di komputer.

IsValidIdentifier(String)

Mengembalikan nilai yang menunjukkan apakah nilai yang ditentukan adalah pengidentifikasi yang valid untuk bahasa saat ini.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
MemberwiseClone(Boolean)

Membuat salinan dangkal objek saat ini MarshalByRefObject .

(Diperoleh dari MarshalByRefObject)
Parse(TextReader)

Mengkompilasi kode yang dibaca dari aliran teks yang ditentukan ke dalam CodeCompileUnit.

Supports(GeneratorSupport)

Mengembalikan nilai yang menunjukkan apakah dukungan pembuatan kode yang ditentukan disediakan.

ToString()

Mengembalikan yang String berisi nama Component, jika ada. Metode ini tidak boleh ditimpa.

(Diperoleh dari Component)

Acara

Disposed

Terjadi ketika komponen dibuang oleh panggilan ke Dispose() metode .

(Diperoleh dari Component)

Berlaku untuk

Lihat juga