gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:08 28 4
gpt4 key购买 nike

我正在尝试构建一个 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 平台的任何编译器 - 这是一种不好的做法。您可以仅使用 C# 来执行此操作。使用 CodeDomProvider class 你可以很容易地写这个。

  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);
}
}
}

关于c# - 从 C# 程序运行 C# 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721406/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com