Comparteix a través de


CSharpCodeProvider Clase

Definición

Proporciona acceso a instancias del generador de código y del compilador de código de C#.

public ref class CSharpCodeProvider : System::CodeDom::Compiler::CodeDomProvider
public class CSharpCodeProvider : System.CodeDom.Compiler.CodeDomProvider
type CSharpCodeProvider = class
    inherit CodeDomProvider
Public Class CSharpCodeProvider
Inherits CodeDomProvider
Herencia

Ejemplos

En el ejemplo siguiente se usa el proveedor de código de C# o Visual Basic para compilar un archivo de código fuente. En el ejemplo se comprueba la extensión de archivo de entrada y se usa el correspondiente CSharpCodeProvider o VBCodeProvider para la compilación. El archivo de entrada se compila en un archivo ejecutable y los errores de compilación se muestran en la consola.

using System;
using System.IO;
using System.Globalization;
using System.CodeDom.Compiler;
using System.Text;
using Microsoft.CSharp;
using Microsoft.VisualBasic;

namespace CodeProviders
{
    class CompileSample
    {
        [STAThread]
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                //  First parameter is the source file name.
                if (File.Exists(args[0]))
                {
                    CompileExecutable(args[0]);
                }
                else
                {
                    Console.WriteLine("Input source file not found - {0}",
                        args[0]);
                }
            }
            else
            {
                Console.WriteLine("Input source file not specified on command line!");
            }
        }

        public static bool CompileExecutable(String sourceName)
        {
            FileInfo sourceFile = new FileInfo(sourceName);
            CodeDomProvider provider = null;
            bool compileOk = false;

            // Select the code provider based on the input file extension.
            if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
            {
                provider = CodeDomProvider.CreateProvider("CSharp");
            }
            else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
            {
                provider = CodeDomProvider.CreateProvider("VisualBasic");
            }
            else
            {
                Console.WriteLine("Source file must have a .cs or .vb extension");
            }

            if (provider != null)
            {

                // Format the executable file name.
                // Build the output assembly path using the current directory
                // and <source>_cs.exe or <source>_vb.exe.

                String exeName = String.Format(@"{0}\{1}.exe",
                    System.Environment.CurrentDirectory,
                    sourceFile.Name.Replace(".", "_"));

                CompilerParameters cp = new CompilerParameters();

                // Generate an executable instead of
                // a class library.
                cp.GenerateExecutable = true;

                // Specify the assembly file name to generate.
                cp.OutputAssembly = exeName;

                // Save the assembly as a physical file.
                cp.GenerateInMemory = false;

                // Set whether to treat all warnings as errors.
                cp.TreatWarningsAsErrors = false;

                // Invoke compilation of the source file.
                CompilerResults cr = provider.CompileAssemblyFromFile(cp,
                    sourceName);

                if(cr.Errors.Count > 0)
                {
                    // Display compilation errors.
                    Console.WriteLine("Errors building {0} into {1}",
                        sourceName, cr.PathToAssembly);
                    foreach(CompilerError ce in cr.Errors)
                    {
                        Console.WriteLine("  {0}", ce.ToString());
                        Console.WriteLine();
                    }
                }
                else
                {
                    // Display a successful compilation message.
                    Console.WriteLine("Source {0} built into {1} successfully.",
                        sourceName, cr.PathToAssembly);
                }

                // Return the results of the compilation.
                if (cr.Errors.Count > 0)
                {
                    compileOk = false;
                }
                else
                {
                    compileOk = true;
                }
            }
            return compileOk;
        }
    }
}
Imports System.IO
Imports System.Globalization
Imports System.CodeDom.Compiler
Imports System.Text
Imports Microsoft.CSharp

Namespace CodeProviders
    Class CompileSample
        <STAThread()>  _
        Public Shared Sub Main(args() As String)

            If args.Length > 0
                ' First parameter is the source file name.
                If File.Exists(args(0))
                    CompileExecutable(args(0))
                Else 
                    Console.WriteLine("Input source file not found - {0}", _
                        args(0))
                End If
            
            Else
                Console.WriteLine("Input source file not specified on command line!")
            End If
        End Sub

        Public Shared Function CompileExecutable(sourceName As String) As Boolean
            Dim sourceFile As FileInfo = New FileInfo(sourceName)
            Dim provider As CodeDomProvider = Nothing
            Dim compileOk As Boolean = False

            ' Select the code provider based on the input file extension.
            If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS"

                provider = CodeDomProvider.CreateProvider("CSharp")

            ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB"

                provider = CodeDomProvider.CreateProvider("VisualBasic")

            Else
                Console.WriteLine("Source file must have a .cs or .vb extension")
            End If

            If Not provider Is Nothing

                ' Format the executable file name.
                ' Build the output assembly path using the current directory
                ' and <source>_cs.exe or <source>_vb.exe.

                Dim exeName As String = String.Format("{0}\{1}.exe", _
                    System.Environment.CurrentDirectory, _
                    sourceFile.Name.Replace(".", "_"))

                Dim cp As CompilerParameters = new CompilerParameters()

                ' Generate an executable instead of 
                ' a class library.
                cp.GenerateExecutable = True

                ' Specify the assembly file name to generate.
                cp.OutputAssembly = exeName
    
                ' Save the assembly as a physical file.
                cp.GenerateInMemory = False
    
                ' Set whether to treat all warnings as errors.
                cp.TreatWarningsAsErrors = False
 
                ' Invoke compilation of the source file.
                Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
                    sourceName)
    
                If cr.Errors.Count > 0
                    ' Display compilation errors.
                    Console.WriteLine("Errors building {0} into {1}", _
                        sourceName, cr.PathToAssembly)

                    Dim ce As CompilerError
                    For Each ce In cr.Errors
                        Console.WriteLine("  {0}", ce.ToString())
                        Console.WriteLine()
                    Next ce
                Else
                    ' Display a successful compilation message.
                    Console.WriteLine("Source {0} built into {1} successfully.", _
                        sourceName, cr.PathToAssembly)
                End If
              
                ' Return the results of the compilation.
                If cr.Errors.Count > 0
                    compileOk = False
                Else 
                    compileOk = True
                End If
            End If
            return compileOk

        End Function
    End Class
End Namespace

Comentarios

Esta clase proporciona métodos que se pueden usar para recuperar instancias de las implementaciones y ICodeCompiler C#ICodeGenerator.

Nota

Esta clase contiene una demanda de vínculo y una demanda de herencia en el nivel de clase que se aplica a todos los miembros. SecurityException Se produce una excepción cuando el llamador inmediato o la clase derivada no tienen permiso de plena confianza.

Constructores

CSharpCodeProvider()

Inicializa una nueva instancia de la clase CSharpCodeProvider.

CSharpCodeProvider(IDictionary<String,String>)

Inicializa una nueva instancia de la clase CSharpCodeProvider usando las opciones del proveedor especificado.

Propiedades

CanRaiseEvents

Obtiene un valor que indica si el componente puede generar un evento.

(Heredado de Component)
Container

Obtiene la interfaz IContainer que contiene la clase Component.

(Heredado de Component)
DesignMode

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

(Heredado de Component)
Events

Obtiene la lista de controladores de eventos asociados a Component.

(Heredado de Component)
FileExtension

Obtiene la extensión de nombre de archivo que se usará al crear archivos de código fuente.

LanguageOptions

Obtiene un identificador de características de lenguaje.

(Heredado de CodeDomProvider)
Site

Obtiene o establece ISite de Component.

(Heredado de Component)

Métodos

CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Compila un ensamblado basado en los árboles System.CodeDom que contiene la matriz especificada de objetos CodeCompileUnit, utilizando la configuración del compilador especificada.

(Heredado de CodeDomProvider)
CompileAssemblyFromFile(CompilerParameters, String[])

Compila un ensamblado a partir del código fuente que contienen los archivos especificados, utilizando la configuración de compilador especificada.

(Heredado de CodeDomProvider)
CompileAssemblyFromSource(CompilerParameters, String[])

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

(Heredado de CodeDomProvider)
CreateCompiler()
Obsoletos.
Obsoletos.

Obtiene una instancia del compilador de código de C#.

CreateEscapedIdentifier(String)

Crea un identificador de escape para el valor especificado.

(Heredado de CodeDomProvider)
CreateGenerator()
Obsoletos.
Obsoletos.

Obtiene una instancia del generador de código de C#.

CreateGenerator(String)

Cuando se reemplaza en una clase derivada, crea un nuevo generador de código utilizando el nombre de archivo especificado para los resultados.

(Heredado de CodeDomProvider)
CreateGenerator(TextWriter)

Cuando se reemplaza en una clase derivada, crea un nuevo generador de código utilizando el TextWriter especificado para los resultados.

(Heredado de CodeDomProvider)
CreateObjRef(Type)

Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

(Heredado de MarshalByRefObject)
CreateParser()
Obsoletos.
Obsoletos.

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

(Heredado de CodeDomProvider)
CreateValidIdentifier(String)

Crea un identificador válido para el valor especificado.

(Heredado de CodeDomProvider)
Dispose()

Libera todos los recursos que usa Component.

(Heredado de Component)
Dispose(Boolean)

Libera los recursos no administrados que usa Component y, de forma opcional, libera los recursos administrados.

(Heredado de Component)
Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GenerateCodeFromCompileUnit(CodeCompileUnit, TextWriter, CodeGeneratorOptions)

Genera código para la unidad de compilación CodeDOM (Code Document Object Model) especificada y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GenerateCodeFromExpression(CodeExpression, TextWriter, CodeGeneratorOptions)

Genera código para la expresión CodeDOM (Code Document Object Model) especificada y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Genera código para el miembro de clase especificado usando las opciones del generador de código y el programa de escritura de texto especificados.

GenerateCodeFromMember(CodeTypeMember, TextWriter, CodeGeneratorOptions)

Genera código para la declaración de miembro CodeDOM (Code Document Object Model) especificada y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Genera código para el espacio de nombres CodeDOM (Code Document Object Model) especificado y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GenerateCodeFromStatement(CodeStatement, TextWriter, CodeGeneratorOptions)

Genera código para la instrucción CodeDOM (Code Document Object Model) especificada y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GenerateCodeFromType(CodeTypeDeclaration, TextWriter, CodeGeneratorOptions)

Genera código para la declaración de tipos CodeDOM (Code Document Object Model) especificada y lo envía al escritor de texto especificado utilizando las opciones igualmente especificadas.

(Heredado de CodeDomProvider)
GetConverter(Type)

Obtiene un TypeConverter para el tipo de objeto especificado.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetLifetimeService()
Obsoletos.

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

(Heredado de MarshalByRefObject)
GetService(Type)

Devuelve un objeto que representa el servicio suministrado por Component o por Container.

(Heredado de Component)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetTypeOutput(CodeTypeReference)

Obtiene el tipo indicado por el CodeTypeReference especificado.

(Heredado de CodeDomProvider)
InitializeLifetimeService()
Obsoletos.

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

(Heredado de MarshalByRefObject)
IsValidIdentifier(String)

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

(Heredado de CodeDomProvider)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
MemberwiseClone(Boolean)

Crea una copia superficial del objeto MarshalByRefObject actual.

(Heredado de MarshalByRefObject)
Parse(TextReader)

Compila en CodeCompileUnit el código leído de la secuencia de texto especificada.

(Heredado de CodeDomProvider)
Supports(GeneratorSupport)

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

(Heredado de CodeDomProvider)
ToString()

Devuelve una String que contiene el nombre del Component, si existe. Este método no se debe invalidar.

(Heredado de Component)

Eventos

Disposed

Tiene lugar cuando una llamada elimina el componente mediante una llamada al método Dispose().

(Heredado de Component)

Se aplica a

Consulte también