mir*_*agk 1 c# compilation batch-file csc
我正在尝试构建一个将不同语言转换为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");
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
不要使用批处理脚本调用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1146 次 |
| 最近记录: |