Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase CodeDomProvider

 

Publicado: octubre de 2016

Proporciona una clase base para CodeDomProvider las implementaciones. Esta clase es abstracta.

Espacio de nombres:   System.CodeDom.Compiler
Ensamblado:  System (en System.dll)

System.Object
  System.MarshalByRefObject
    System.ComponentModel.Component
      System.CodeDom.Compiler.CodeDomProvider
        Microsoft.CSharp.CSharpCodeProvider
        Microsoft.JScript.JScriptCodeProvider
        Microsoft.VisualBasic.VBCodeProvider

[ComVisibleAttribute(true)]
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
[PermissionSetAttribute(SecurityAction.InheritanceDemand, Name = "FullTrust")]
public abstract class CodeDomProvider : Component

NombreDescripción
System_CAPS_protmethodCodeDomProvider()

Inicializa una nueva instancia de la clase CodeDomProvider.

NombreDescripción
System_CAPS_protpropertyCanRaiseEvents

Obtiene un valor que indica si el componente puede provocar un evento.(Heredado de Component).

System_CAPS_pubpropertyContainer

Obtiene IContainer que contiene Component.(Heredado de Component).

System_CAPS_protpropertyDesignMode

Obtiene un valor que indica si la Component está actualmente en modo de diseño.(Heredado de Component).

System_CAPS_protpropertyEvents

Obtiene la lista de controladores de eventos que se adjuntará a este Component.(Heredado de Component).

System_CAPS_pubpropertyFileExtension

Obtiene la extensión de nombre de archivo predeterminado que se utilizará para los archivos de código fuente en el lenguaje actual.

System_CAPS_pubpropertyLanguageOptions

Obtiene un identificador de características de lenguaje.

System_CAPS_pubpropertySite

Obtiene o establece la ISite de la Component.(Heredado de Component).

NombreDescripción
System_CAPS_pubmethodCompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Compila un ensamblado basado en el System.CodeDom contenidos en la matriz especificada de los árboles CodeCompileUnit objetos, mediante la configuración del compilador especificado.

System_CAPS_pubmethodCompileAssemblyFromFile(CompilerParameters, String[])

Compila un ensamblado desde el código de origen contenido en los archivos especificados, utilizando la configuración especificada del compilador.

System_CAPS_pubmethodCompileAssemblyFromSource(CompilerParameters, String[])

Compila un ensamblado de la matriz especificada de cadenas que contiene código fuente, utilizando la configuración especificada del compilador.

System_CAPS_pubmethodCreateCompiler()

Obsoleto. Cuando se invalida en una clase derivada, crea un nuevo compilador de código.

System_CAPS_pubmethodCreateEscapedIdentifier(String)

Crea un identificador de escape para el valor especificado.

System_CAPS_pubmethodCreateGenerator()

Obsoleto. Cuando se invalida en una clase derivada, crea un nuevo generador de código.

System_CAPS_pubmethodCreateGenerator(String)

Cuando se invalida en una clase derivada, crea un nuevo generador de código utilizando el nombre de archivo especificado para la salida.

System_CAPS_pubmethodCreateGenerator(TextWriter)

Cuando se invalida en una clase derivada, crea un nuevo generador de código utilizando el parámetro TextWriter para la salida.

System_CAPS_pubmethodCreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar a un proxy que se utiliza para comunicarse con un objeto remoto.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodCreateParser()

Obsoleto. Cuando se invalida en una clase derivada, crea un nuevo analizador de código.

System_CAPS_pubmethodSystem_CAPS_staticCreateProvider(String)

Obtiene un CodeDomProvider instancia para el idioma especificado.

System_CAPS_pubmethodSystem_CAPS_staticCreateProvider(String, IDictionary<String, String>)

Obtiene un CodeDomProvider instancia para las opciones de idioma y el proveedor especificadas.

System_CAPS_pubmethodCreateValidIdentifier(String)

Crea un identificador válido para el valor especificado.

System_CAPS_pubmethodDispose()

Libera todos los recursos que usa Component.(Heredado de Component).

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados que usa Component y libera los recursos administrados de forma opcional.(Heredado de Component).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Libera recursos no administrados y realiza otras operaciones de limpieza antes de que se reclame el elemento Component durante la recolección de elementos no usados.(Heredado de Component).

System_CAPS_pubmethodGenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions)

Genera código para la unidad de compilación de modelo de objetos de documento de código (CodeDOM) especificada y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodGenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions)

Genera código para la expresión de modelo de objetos de documento de código (CodeDOM) especificada y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodGenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Genera código para la declaración de miembros del modelo de objetos de documento de código (CodeDOM) especificada y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodGenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Genera código para el espacio de nombres del modelo de objetos de documento de código (CodeDOM) especificado y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodGenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions)

Genera código para la instrucción de modelo de objetos de documento de código (CodeDOM) especificada y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodGenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions)

Genera código para la declaración de tipo de modelo de objetos de documento de código (CodeDOM) especificada y lo envía al escritor de texto especificado utilizando las opciones especificadas.

System_CAPS_pubmethodSystem_CAPS_staticGetAllCompilerInfo()

Devuelve el idioma de los valores de configuración del proveedor y compilador para este equipo.

System_CAPS_pubmethodSystem_CAPS_staticGetCompilerInfo(String)

Devuelve el idioma de los valores de configuración del proveedor y compilador para el idioma especificado.

System_CAPS_pubmethodGetConverter(Type)

Obtiene un TypeConverter para el tipo de datos especificado.

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodSystem_CAPS_staticGetLanguageFromExtension(String)

Devuelve un nombre de lenguaje asociado a la extensión de nombre de archivo especificado, como está configurado en la CodeDomProvider sección de configuración de compilador.

System_CAPS_pubmethodGetLifetimeService()

Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).

System_CAPS_protmethodGetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.(Heredado de Component).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodGetTypeOutput(CodeTypeReference)

Obtiene el tipo indicado por el objeto CodeTypeReference.

System_CAPS_pubmethodInitializeLifetimeService()

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodSystem_CAPS_staticIsDefinedExtension(String)

Comprueba si una extensión de nombre de archivo tiene asociada una CodeDomProvider configurado en el equipo de implementación.

System_CAPS_pubmethodSystem_CAPS_staticIsDefinedLanguage(String)

Comprueba si un lenguaje tiene un CodeDomProvider configurado en el equipo de implementación.

System_CAPS_pubmethodIsValidIdentifier(String)

Devuelve un valor que indica si el valor especificado es un identificador válido para el idioma actual.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone(Boolean)

Crea una copia superficial del elemento actual MarshalByRefObject objeto.(Heredado de MarshalByRefObject).

System_CAPS_pubmethodParse(TextReader)

Compila el código de lectura de la secuencia de texto especificada en un CodeCompileUnit.

System_CAPS_pubmethodSupports(GeneratorSupport)

Devuelve un valor que indica si se admite la generación de código especificada se proporciona.

System_CAPS_pubmethodToString()

Devuelve un String que contiene el nombre de la Component, si existe. Este método no se debe invalidar.(Heredado de Component).

NombreDescripción
System_CAPS_pubeventDisposed

Se produce cuando el componente se elimina mediante una llamada a la Dispose (método).(Heredado de Component).

Un CodeDomProvider puede utilizarse para crear y recuperar instancias de generadores de código y compiladores de código. Generadores de código pueden utilizarse para generar código en un lenguaje determinado y los compiladores de código pueden utilizarse para compilar el código en ensamblados.

System_CAPS_noteNota

En la .NET Framework&2;.0, los métodos a disposición en el generador de código y el compilador de código están disponibles directamente desde el proveedor de código. No es necesario llamar a CreateGenerator o CreateCompiler para tener acceso a los métodos y los métodos están marcados como obsoletos. Esto se aplica a preexistente, así como las implementaciones del proveedor de código nuevo.

Un CodeDomProvider implementación normalmente proporciona código de generación o código interfaces de compilación para generar código y administrar la compilación para un solo lenguaje de programación. Admiten varios idiomas CodeDomProvider implementaciones que se suministran con el Kit de desarrollo de software de Windows (SDK). Estos lenguajes incluyen C#, Visual Basic, C++ y JScript. Los desarrolladores y proveedores de compiladores pueden implementar la ICodeGenerator y ICodeCompiler e interfaces proporcionan un CodeDomProvider que extiende la compatibilidad de CodeDOM a otros lenguajes de programación.

El <system.codedom> (Elemento) en la configuración del equipo (Machine.config) del archivo proporciona un mecanismo para desarrolladores y proveedores de compiladores agregar valores de configuración para adicionales CodeDomProvider implementaciones.

La CodeDomProvider clase proporciona métodos estáticos para descubrir y enumerar los CodeDomProvider implementaciones en un equipo. El GetAllCompilerInfo método devuelve los valores para todos los CodeDomProvider las implementaciones en un equipo. El GetCompilerInfo método devuelve la configuración de un determinado CodeDomProvider implementación, basándose en el nombre del lenguaje de programación. El CreateProvider método devuelve una instancia de un CodeDomProvider implementación para un idioma específico.

Para obtener más detalles sobre la configuración del proveedor de lenguaje del archivo de configuración, consulte Esquema de configuración de compilador y proveedor de lenguaje.

System_CAPS_noteNota

Esta clase realiza una petición de vínculo y una petición de herencia en el nivel de clase. Un SecurityException se produce si el llamador inmediato o la clase derivada no tiene permiso de plena confianza. Para obtener más información acerca de las peticiones de seguridad, consulte Link Demands y peticiones de herencia.

Notas para desarrolladores de herederos:

En las versiones 1.0 y 1.1 de .NET Framework, los proveedores de código están formados por implementaciones de CodeDomProvider, ICodeGenerator, ICodeParser, y ICodeCompiler. En el .NET Framework 2.0, CreateGenerator, CreateParser, y CreateCompiler métodos están obsoletos y los métodos de ICodeGenerator y ICodeCompiler están disponibles directamente en la CodeDomProvider clase. Debe invalidar estos métodos en su implementación del proveedor de código y no llamar a los métodos base.

El programa de ejemplo siguiente puede generar y compilar código fuente basado en un modelo CodeDOM de un programa que imprime "Hello World" con la Console clase. Se proporciona una interfaz de usuario de formularios Windows Forms. El usuario puede seleccionar el idioma de varias selecciones de programación de destino: C#, Visual Basic y JScript.

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());
        }
    }
}

SecurityAction.LinkDemand

for full trust for the immediate caller. This class cannot be used by partially trusted code.

SecurityAction.InheritanceDemand

for full trust for inheritors. This class cannot be inherited by partially trusted code.

.NET Framework
Disponible desde 1.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: