Использовать компилятор из кода C# достаточно просто. А вот зачем – это другой вопрос :).
Напишем первый простой пример. Создаем консольное приложение и напишем следующий код:
Запускаем и проверяем:
Первое, на что стоит обратить внимание – это использование двух пространств имен (namespace):
Hello World
Напишем первый простой пример. Создаем консольное приложение и напишем следующий код:
using System;<br>using System.CodeDom.Compiler;<br>using System.Collections.Generic;<br>using Microsoft.CSharp;<br><br>namespace ConsoleCompiler<br>{<br> internal class Program<br> {<br> private static void Main(string[] args)<br> {<br> // Source code для компиляции<br> string source =<br> @"<br>namespace Foo<br>{<br> public class Bar<br> {<br> static void Main(string[] args)<br> {<br> Bar.SayHello();<br> }<br><br> public static void SayHello()<br> {<br> System.Console.WriteLine(""Hello World"");<br> }<br> }<br>}<br> ";<br><br> // Настройки компиляции<br> Dictionary<string, string> providerOptions = new Dictionary<string, string><br> {<br> {"CompilerVersion", "v3.5"}<br> };<br> CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);<br><br> CompilerParameters compilerParams = new CompilerParameters<br> {OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true};<br><br> // Компиляция<br> CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);<br><br> // Выводим информацию об ошибках<br> Console.WriteLine("Number of Errors: {0}", results.Errors.Count);<br> foreach (CompilerError err in results.Errors)<br> {<br> Console.WriteLine("ERROR {0}", err.ErrorText);<br> }<br> }<br> }<br>}<br><br>* This source code was highlighted with Source Code Highlighter.
Запускаем и проверяем:

Первое, на что стоит обратить внимание – это использование двух пространств имен (namespace):
- Microsoft.CSharp
- System.CodeDom.Compiler