以编程方式调用C#编译器编译C#代码

3

我设计了一门自己的语言,最终将其翻译成 C# 代码。现在,我想通过我的 Windows Forms 应用程序使用 C# 编译器来编译这个 C# 代码。

实际的编译器文件位于哪里?如何编译我的代码(目前放在一个字符串中)?


3
请查看:https://dev59.com/cnRB5IYBdhLWcg3wr44U - Anirudh Ramanathan
4
@DarkXphenomenon:这有什么意义吗?你没有正确阅读问题。 - leppie
@leppi 这个链接与这个问题非常相关。我已经标记了你的评论为粗鲁/冒犯。 - MattDavey
2
@MattDavey等人,命令提示符是否可编程?不是的... - leppie
2
@leppie是正确的..我需要从我的C#应用程序中编译程序,而不是手动通过命令行..!! - atastrophic
显示剩余4条评论
6个回答

5

3

0
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

0

您需要查看以下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等。”


2
我知道(CodeDom),但问题的一部分是“csc.exe位于哪里”... - Carlos Quintanilla

0

只需使用支持C#语法的Nemerle编译器作为服务。


-1

你考虑过使用Emit吗?

csc.exe编译器是.Net的一部分

csc.exe可执行文件通常位于系统目录下的Microsoft.NET\Framework\文件夹中。它的位置可能因每台计算机的确切配置而异。如果计算机上安装了多个版本的.NET Framework,则该计算机上将存在此可执行文件的多个版本。有关此类安装的更多信息,请参见确定已安装的.NET Framework版本


1
为什么建议使用Reflection.Emit - leppie
1
-1 没有理由关闭 csc.exe,因为 CodeDom 正好完成了所需的操作。 - Felice Pollano
2
虽然它是有效的(我经常使用Emit),但这有点像回答“如何在我的引擎中加注油?”用“首先,你需要几个引擎级金属块,一个铣床,一个…” - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接