我设计了一门自己的语言,最终将其翻译成 C# 代码。现在,我想通过我的 Windows Forms 应用程序使用 C# 编译器来编译这个 C# 代码。
实际的编译器文件位于哪里?如何编译我的代码(目前放在一个字符串中)?
我设计了一门自己的语言,最终将其翻译成 C# 代码。现在,我想通过我的 Windows Forms 应用程序使用 C# 编译器来编译这个 C# 代码。
实际的编译器文件位于哪里?如何编译我的代码(目前放在一个字符串中)?
您好,看起来您需要使用 CSharpCodeProvider
。您可以参考以下链接获得更多信息:http://support.microsoft.com/kb/304655 或者 MSDN 中的示例。
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);
csc
来实现这一点。这是一个有效的答案(假设路径对于机器是正确的等等),但有人认为可能有更直接的方法来实现这一点。 - Marc Gravell您需要查看以下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等。”
只需使用支持C#语法的Nemerle编译器作为服务。
你考虑过使用Emit吗?
csc.exe可执行文件通常位于系统目录下的Microsoft.NET\Framework\文件夹中。它的位置可能因每台计算机的确切配置而异。如果计算机上安装了多个版本的.NET Framework,则该计算机上将存在此可执行文件的多个版本。有关此类安装的更多信息,请参见确定已安装的.NET Framework版本。
Reflection.Emit
? - leppie