2012-07-16 181 views
3

我设计了自己的语言,最终将其转换为C#代码。现在我想通过我的Windows窗体应用程序使用C#编译器编译这个C#代码。以编程方式调用C#编译器编译C#代码

实际的编译器文件位于何处以及如何编译我的代码(当前放置在字符串中)?

+3

请参阅 - > http://stackoverflow.com/questions/553143/compiling-executing-a-c-sharp-source-file-in-command-prompt – 2012-07-16 09:40:37

+4

@DarkXphenomenon:这是什么意思?你没有正确地阅读这个问题。 – leppie 2012-07-16 09:42:15

+0

他想编译C#。 CSC是从命令行执行此操作的一种方式,因此也可以在另一个C#程序中调用。 – 2012-07-16 09:50:04

回答

-1

你有没有使用Emit,而不是考虑?

csc.exe compiler is part of the .Net

的CSC.EXE可执行文件通常位于系统目录下的 Microsoft.NET \框架\文件夹中。 其位置可能因个人计算机上的任何 的确切配置而异。如果计算机上安装了多个版本的.NET Framework ,则此可执行文件的多个版本将为 。有关 安装的更多信息,请参阅Determining Which Version of the .NET Framework Is Installed

+1

为什么建议'Reflection.Emit'? – leppie 2012-07-16 09:49:34

+1

-1由于codedom完全按照要求进行操作,因此没有理由使用csc.exe。 – 2012-07-16 09:50:31

+2

它虽然*有效*(我用了很多),但它有点像回答“我如何在我的发动机中加油”? “首先,你需要几块发动机级金属,一台铣床,......” – 2012-07-16 10:27:58

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); 
+0

**(评论删除)**我已经删除了一些无益的评论;基本上,有些人已经观察到,用csc来实现这一点可能没有必要也不合适。这是一个有效的答案(假设路径对于机器是正确的等),但有人认为可能有更直接的方法来实现这一点。 '' – 2012-07-16 10:16:38

0

你需要看看下面2点:

1 - 命令行建筑CSC.EXE

http://msdn.microsoft.com/en-us/library/78f4aasd.aspx

2 - 栅栏探测器rmining的.NET Framework的版本被安装

http://msdn.microsoft.com/en-us/library/y549e41e.aspx

你需要确定你将使用的.NET Framework编译器的版本,从第二个链接就可以看到:

“你可以在计算机上安装和运行.NET Framework的多个版本。您可以按任何顺序安装这些版本。要查看安装了哪些版本,请查看%WINDIR%\ Microsoft.NET \ Framework目录。 (您还应该查看可以安装32位或64位版本的64位计算机上的Framework64目录。)每个版本的.NET Framework都有一个目录,并且目录名称的前两位数字表示该目录。 .NET Framework版本;例如:.NET Framework 1.1的v1.1.4322,.NET Framework 2.0的v2.0.50727,.NET Framework 3.5的v3.5等。“

+1

-1错误,再次使用CodeDom代替。 – 2012-07-16 09:58:50

+2

我知道(CodeDom),但问题的一部分是“csc.exe所在的位置”... – 2012-07-16 10:21:14

0

只是使用nemerle编译器作为csharp语法的服务。