从C#程序运行C#编译器

我正在尝试构建一个将不同语言转换为C#代码的C#程序。 我有程序正常工作,转换代码并将其写入.cs文件。 我希望自动编译和运行此文件,但是我无法弄清楚如何使用C#执行此操作。

我可以通过运行我编写的批处理文件手动完成,并尝试使用System.Diagnostics.Process类从C#运行此批处理文件。 当它运行时,它在批处理代码本身中给出了一个错误,说没有找到任何命令(通常的“不是可执行文件,批处理文件等”)。 我无法弄清楚为什么它能正常运行,但不能从C#运行时。

这是批处理文件代码:C:\ Program_Files_(x86)\ Microsoft_Visual_Studio 10.0 \ VC \ bin \ amd64 \ vcvars64.bat csc%1.cs暂停

以及调用它的函数:

System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.FileName = "compiler\\compile.bat"; process.StartInfo.Arguments = " "+fileName; process.Start(); process.WaitForExit(); process.StartInfo.FileName = fileName + ".exe"; process.Start(); process.WaitForExit(); Console.WriteLine("done"); 

任何帮助将不胜感激。

不要使用批处理脚本调用C#编译器或.net plataform的任何编译器 – 这是一个糟糕的实践。 您只能使用C#执行此操作。 使用CodeDomProvider类,您可以轻松地编写它。

  static void CompileCSharp(string code) { CodeDomProvider provider = CodeDomProvider.CreateProvider("C#"); ICodeCompiler compiler = provider.CreateCompiler(); CompilerParameters parameters = new CompilerParameters(); parameters.OutputAssembly = @"D:\foo.exe"; parameters.GenerateExecutable = true; CompilerResults results = compiler.CompileAssemblyFromSource(parameters, code); if (results.Output.Count == 0) { Console.WriteLine("success!"); } else { CompilerErrorCollection CErros = results.Errors; foreach (CompilerError err in CErros) { string msg = string.Format("Erro:{0} on line{1} file name:{2}", err.Line, err.ErrorText, err.FileName); Console.WriteLine(msg); } } } 

您可以使用CSharpCodeProvider类以编程方式在C#中编译代码 。