Ещё компилятор C# имеет API, доступный в .NET Framework. Используется примерно так:
using Microsoft.CSharp;
using System.Resources;
public void Compile(string[] resourceFiles, string[] references, string outputFileName)
{
var compiledResources = new List<string>();
foreach (string resourceFile in resourceFiles)
{
string resourceRoot = new FileInfo(outputFileName).Directory.FullName;
using (ResXResourceReader reader = new ResXResourceReader(resourceFile))
{
string outResPath = resourceRoot + "\\"
+ Path.GetFileNameWithoutExtension(resourceFile) + ".resources";
using (ResourceWriter rw = new ResourceWriter(outResPath))
{
IDictionaryEnumerator ren = reader.GetEnumerator();
while (ren.MoveNext())
{
rw.AddResource(ren.Key.ToString(), ren.Value.ToString());
}
compiledResources.Add(outResPath);
}
}
}
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters(references.ToArray(), outputFileName);
parameters.EmbeddedResources.AddRange(compiledResources.ToArray());
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCodes);
foreach (CompilerError error in results.Errors)
{
//speakOut(string.Format("Line:{0:d},Error:{1}\n", error.Line, error.ErrorText));
}
}