CSharpCodeProvider Classe

Definição

Fornece acesso a instâncias do gerador de código C# e do compilador de código.

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
Herança

Exemplos

O exemplo seguinte utiliza o fornecedor de código C# ou Visual Basic para compilar um ficheiro fonte. O exemplo verifica a extensão do ficheiro de entrada e utiliza o correspondente CSharpCodeProvider or VBCodeProvider for compilation. O ficheiro de entrada é compilado num ficheiro executável, e quaisquer erros de compilação são exibidos na consola.

Importante

Os métodos CompileAssemblyFrom* não são suportados no .NET Core e .NET 5+. Este exemplo só corre no .NET Framework.

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

Observações

Esta classe fornece métodos que podem ser usados para recuperar instâncias do C# ICodeGenerator e ICodeCompiler implementações.

Note

Essa classe contém uma demanda de link e uma demanda de herança no nível de classe que se aplica a todos os membros. A SecurityException é lançado quando o chamador imediato ou a classe derivada não tem permissão de confiança plena.

Construtores

Name Description
CSharpCodeProvider()

Inicializa uma nova instância da CSharpCodeProvider classe.

CSharpCodeProvider(IDictionary<String,String>)

Inicializa uma nova instância da CSharpCodeProvider classe usando as opções de fornecedor especificadas.

Propriedades

Name Description
CanRaiseEvents

Obtém um valor que indica se o componente pode gerar um evento.

(Herdado de Component)
Container

Obtém o IContainer que contém o Component.

(Herdado de Component)
DesignMode

Obtém um valor que indica se o Component está atualmente em modo de design.

(Herdado de Component)
Events

Obtém a lista de gestores de eventos que estão ligados a isto Component.

(Herdado de Component)
FileExtension

Obtém a extensão do nome do ficheiro para usar ao criar ficheiros de código-fonte.

LanguageOptions

Obtém um identificador de características de linguagem.

(Herdado de CodeDomProvider)
Site

Obtém ou define o ISite do Component.

(Herdado de Component)

Métodos

Name Description
CompileAssemblyFromDom(CompilerParameters, CodeCompileUnit[])

Compila um assembly com base nas System.CodeDom árvores contidas no array especificado de CodeCompileUnit objetos, usando as definições do compilador especificadas.

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

Compila um assembly a partir do código-fonte contido nos ficheiros especificados, usando as definições do compilador especificadas.

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

Compila um assembly a partir do array especificado de strings contendo código-fonte, usando as definições do compilador especificadas.

(Herdado de CodeDomProvider)
CreateCompiler()
Obsoleto.
Obsoleto.

Obtém uma instância do compilador de código C#.

CreateEscapedIdentifier(String)

Cria um identificador escapado para o valor especificado.

(Herdado de CodeDomProvider)
CreateGenerator()
Obsoleto.
Obsoleto.

Obtém uma instância do gerador de código C#.

CreateGenerator(String)

Quando sobrescrito numa classe derivada, cria-se um novo gerador de código usando o nome de ficheiro especificado para saída.

(Herdado de CodeDomProvider)
CreateGenerator(TextWriter)

Quando é sobreposto numa classe derivada, cria-se um novo gerador de código usando o especificado TextWriter para saída.

(Herdado de CodeDomProvider)
CreateObjRef(Type)

Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateParser()
Obsoleto.
Obsoleto.

Quando é sobreposto numa classe derivada, cria-se um novo parser de código.

(Herdado de CodeDomProvider)
CreateValidIdentifier(String)

Cria um identificador válido para o valor especificado.

(Herdado de CodeDomProvider)
Dispose()

Liberta todos os recursos utilizados pelo Component.

(Herdado de Component)
Dispose(Boolean)

Liberta os recursos não geridos usados pelo Component e opcionalmente liberta os recursos geridos.

(Herdado de Component)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

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

Gera código para a unidade de compilação Code Document Object Model (CodeDOM) especificada e envia-o para o escritor de texto especificado, usando as opções especificadas.

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

Gera código para a expressão Code Document Object Model (CodeDOM) especificada e envia-o para o autor do texto especificado, usando as opções especificadas.

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

Gera código para o membro da classe especificado usando as opções de escritor de texto e gerador de código especificadas.

GenerateCodeFromNamespace(CodeNamespace, TextWriter, CodeGeneratorOptions)

Gera código para o namespace Code Document Object Model (CodeDOM) especificado e envia-o para o escritor de texto especificado, usando as opções especificadas.

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

Gera código para a instrução Code Document Object Model (CodeDOM) especificada e envia-o para o autor do texto especificado, usando as opções especificadas.

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

Gera código para a declaração do tipo Code Document Object Model (CodeDOM) especificada e envia-o para o escritor de texto especificado, usando as opções especificadas.

(Herdado de CodeDomProvider)
GetConverter(Type)

Recebe um TypeConverter para o tipo de objeto especificado.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso.

(Herdado de MarshalByRefObject)
GetService(Type)

Devolve um objeto que representa um serviço fornecido pelo Component ou pelo seu Container.

(Herdado de Component)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetTypeOutput(CodeTypeReference)

Obtém o tipo indicado pelo especificado CodeTypeReference.

(Herdado de CodeDomProvider)
InitializeLifetimeService()
Obsoleto.

Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso.

(Herdado de MarshalByRefObject)
IsValidIdentifier(String)

Devolve um valor que indica se o valor especificado é um identificador válido para a língua atual.

(Herdado de CodeDomProvider)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
Parse(TextReader)

Compila o código lido do fluxo de texto especificado para um CodeCompileUnitarquivo .

(Herdado de CodeDomProvider)
Supports(GeneratorSupport)

Devolve um valor que indica se o suporte especificado para geração de código é fornecido.

(Herdado de CodeDomProvider)
ToString()

Devolve a String contendo o nome do Component, se existir. Este método não deve ser ultrapassado.

(Herdado de Component)

evento

Name Description
Disposed

Ocorre quando o componente é eliminado por uma chamada ao Dispose() método.

(Herdado de Component)

Aplica-se a

Ver também