Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo descreve como compilar o código de uma fonte de texto usando o compilador C#.
Versão original do produto: Visual Studio, .NET Framework
Número original do KB: 304655
Resumo
O Microsoft .NET Framework expõe classes que permitem acessar programaticamente o compilador de linguagem C#. Isso pode ser útil se você quiser escrever seus próprios utilitários de compilação de código. Este artigo fornece um código de exemplo que permite compilar o código de uma fonte de texto. O aplicativo permite que você apenas construa o executável ou construa o executável e execute-o. Todos os erros que ocorrem durante o processo de compilação são exibidos no formulário.
Requisitos
- Visual Studio
- Compilador de linguagem Visual C#
Compilar código usando o compilador C#
O .NET Framework fornece a interface de execução do ICodeCompiler
compilador. A CSharpCodeProvider
classe implementa essa interface e fornece acesso a instâncias do gerador de código C# e do compilador de código. O código de exemplo a seguir cria uma instância e CSharpCodeProvider
a usa para obter uma referência a uma ICodeCompiler
interface.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
Depois de ter uma referência a uma ICodeCompiler
interface, você pode usá-la para compilar seu código-fonte. Você passará parâmetros para o compilador usando a CompilerParameters
classe. Este é um exemplo:
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = icc.CompileAssemblyFromSource(parameters,SourceString);
O código acima usa o CompilerParameters
objeto para informar ao compilador que você deseja gerar um arquivo executável (em vez de uma DLL) e que deseja enviar o assembly resultante para o disco. A chamada para CompileAssemblyFromSource
é onde o assembly é compilado. Esse método usa o objeto parameters e o código-fonte, que é uma string. Depois de compilar seu código, você pode verificar se houve algum erro de compilação. Você usa o valor de retorno de CompileAssemblyFromSource
, que é um CompilerResults
objeto. Esse objeto contém uma coleção errors, que contém todos os erros ocorridos durante a compilação.
if (results.Errors.Count > 0)
{
foreach(CompilerError CompErr in results.Errors)
{
textBox2.Text = textBox2.Text +
"Line number " + CompErr.Line +
", Error Number: " + CompErr.ErrorNumber +
", '" + CompErr.ErrorText + ";" +
Environment.NewLine + Environment.NewLine;
}
}
Existem outras opções para compilação, como compilar a partir de um arquivo. Você também pode compilar em lote, o que significa que você pode compilar vários arquivos ou fontes ao mesmo tempo.
Exemplo de procedimento passo a passo
Crie um novo aplicativo Visual C# .NET Windows. Form1 é criado por padrão.
Adicione um controle Button a Form1 e altere sua propriedade Text para Build.
Adicione outro controle Button ao Form1 e altere sua propriedade Text para Executar.
Adicione dois controles TextBox a Form1, defina a propriedade Multiline para ambos os controles como True e dimensione esses controles para que você possa colar várias linhas de texto em cada um.
No editor de código, abra o arquivo de origem Form1.cs .
Na classe, cole
Form1
o seguinte manipulador de cliques de botão.private void button1_Click(object sender, System.EventArgs e) { CSharpCodeProvider codeProvider = new CSharpCodeProvider(); ICodeCompiler icc = codeProvider.CreateCompiler(); string Output = "Out.exe"; Button ButtonObject = (Button)sender; textBox2.Text = ""; System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); //Make sure we generate an EXE, not a DLL parameters.GenerateExecutable = true; parameters.OutputAssembly = Output; CompilerResults results = icc.CompileAssemblyFromSource(parameters, textBox1.Text); if (results.Errors.Count > 0) { textBox2.ForeColor = Color.Red; foreach (CompilerError CompErr in results.Errors) { textBox2.Text = textBox2.Text + "Line number " + CompErr.Line + ", Error Number: " + CompErr.ErrorNumber + ", '" + CompErr.ErrorText + ";" + Environment.NewLine + Environment.NewLine; } } else { //Successful Compile textBox2.ForeColor = Color.Blue; textBox2.Text = "Success!"; //If we clicked run then launch our EXE if (ButtonObject.Text == "Run") Process.Start(Output); } }
No início do arquivo, adicione estas
using
instruções:using System.CodeDom.Compiler; using System.Diagnostics; using Microsoft.CSharp;
Em Form1.cs, localize o
Form1
construtor.Após a chamada no
InitializeComponent
Form1
construtor, adicione o código a seguir para conectar o manipulador de clique de botão a ambos os botões que você adicionou ao Form1.public Form1() { InitializeComponent(); this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button1_Click); }
Execute o projeto . Depois que o Form1 for carregado, clique no botão Compilar .
Observação
Você recebe um erro do compilador.
Em seguida, copie o seguinte texto para a caixa de texto, substituindo qualquer texto existente:
using System; namespace HelloWorld { /// <summary> /// Summary description for Class1. /// </summary> class HelloWorldClass { static void Main(string[] args) { Console.WriteLine("Hello World!"); Console.ReadLine(); } } }
Clique em Compilar novamente. A compilação deve ser bem-sucedida.
Clique em Executar e ele compilará o código e executará o arquivo executável resultante. A compilação cria um arquivo executável chamado Out.exe, que é salvo na mesma pasta que o aplicativo que você está executando.
Observação
Você pode modificar o código na caixa de texto para ver diferentes erros do compilador. Por exemplo, exclua um dos ponto-e-vírgula e recompile o código.
Por fim, modifique o código na caixa de texto para gerar outra linha de texto para a janela do console. Clique em Executar para ver a saída.