我设计了自己的语言,最终将其转换为 C# 代码。现在我想通过我的 Windows 窗体应用程序使用 C# 编译器编译这个 C# 代码。
实际的编译器文件在哪里以及如何编译我的代码(当前放在一个字符串中)?
我设计了自己的语言,最终将其转换为 C# 代码。现在我想通过我的 Windows 窗体应用程序使用 C# 编译器编译这个 C# 代码。
实际的编译器文件在哪里以及如何编译我的代码(当前放在一个字符串中)?
听起来您正在寻找CSharpCodeProvider
. http://support.microsoft.com/kb/304655或MSDN有示例。
为此,您可以使用 C# CodeDom。此链接可能对您有所帮助
http://www.codeproject.com/Articles/3445/Runtime-Compilation-A-NET-eval-statement
c:\windows\Microsoft.NET\Framework\v3.5\
包含 C# 编译器csc.exe
。
因此,您可以执行以下操作:
const string outputfile = "abc.exe";
const string inputFile = "xyz.cs"
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "c:\\windows\\Microsoft.NET\\Framework\v3.5\\csc.exe";
startInfo.Arguments = "/out:" + outputFile + " " + inputFile;
Process.Start(startInfo);
您需要查看以下 2 个站点:
1 - 使用 csc.exe 构建命令行
http://msdn.microsoft.com/en-us/library/78f4aasd.aspx
和
2 - 确定安装了哪个版本的 .NET Framework
http://msdn.microsoft.com/en-us/library/y549e41e.aspx
您将需要确定您将使用哪个版本的 .NET Framework 编译器,您可以从第二个链接中看到:
“您可以在一台计算机上安装和运行多个版本的 .NET Framework。您可以按任意顺序安装这些版本。要查看安装了哪些版本,请查看 %WINDIR%\Microsoft.NET\Framework 目录。(您还应该在 64 位电脑上查看 Framework64 目录,可以安装 32 位或 64 位版本。)每个版本的 .NET Framework 都有一个目录,目录名的前两位数字标识 .NET Framework 版本;例如:.NET Framework 1.1 的 v1.1.4322、.NET Framework 2.0 的 v2.0.50727、.NET Framework 3.5 的 v3.5,等等。”
只需将 nemerle 编译器用作具有 csharp 语法的服务。
您是否考虑过使用Emit代替?
csc.exe 可执行文件通常位于系统目录下的 Microsoft.NET\Framework\ 文件夹中。它的位置可能会有所不同,具体取决于任何个人计算机上的确切配置。如果计算机上安装了多个版本的 .NET Framework,则该可执行文件的多个版本将出现在计算机上。有关此类安装的详细信息,请参阅确定已安装的 .NET Framework 版本。