如何编译运行 C# 程序

作者:vkvi 来源:千一网络(原创) 日期:2007-7-18

在 C# 章节中,前面的文章我们都是将 C# 作为 ASP.NET 的开发语言来介绍的,其中的代码都受到了 ASP.NET 的影响,比如 Page_Load 函数就属于 ASP.NET 的内容,在本章节以后的部分文章中,我们将介绍“纯” C#,它不在 ASP.NET 中运行,遍身上下皆是 C# 代码,所以我们先讲一讲如何编译运行“纯” C# 程序。

编辑“纯” C# 代码,就是编辑 C# 类文件,扩展名为 .cs(VB 类文件扩展名为 .vb),可以用任何文本编辑器编辑。C# 是完全面向对象的,不存在全局的变量、常量和函数,所以所有程序代码都集中在类中,将某个类的 Main 函数作为程序入口函数就可以运行了。

关于如何编写这些类,我们在今后的文章中有专门介绍,下面谈谈如何把 .cs 文件编译成 .exe 文件。

 

要将 .cs 文件编译成 .exe 文件,需要一个 csc.exe(以下简称 csc)文件(编译 .vb 的文件是 vbc.exe),在安装了 .NET Framework 后,我们可以在类似 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 的位置找到这个文件,我们应该在命令提示符中运行这个文件,可以通过 csc /? 查看该程序的选项。

我们现有 .cs 文件如下:

using System;
/// <summary>
/// Summary description for Class1
/// </summary>
public class Class1
{
    public static void Main()
    {
        //
    }
}

该文件存储于 D:\foo.cs,我们现在通过 csc 将其编译成 .exe 保存于 E:\foo.exe。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>csc /target:exe /out:E:\foo.exe
 D:\foo.cs
  • 由于网页显示原因,上述内容可能被分隔为两行,实际为一行。
  • /target:exe 表示编译的目标是 exe 文件(还可以是 winexe、library、module)。
  • /out:(注意不是 /output:)表示编译的的目标文件的存放位置。

双击 foo.exe,我们可以看到窗口一闪而过,这是由于程序没有任何应用代码,“一下就执行完了”,不过我们通常在命令提示符中执行,而不是双击。

 

要注意的是这里生成的 exe 是一个由中间语言(IL),元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头(比如Win32平台就是加了一个标准Win32可执行文件头)组成的PE(portable executable,可移植执行体)文件,而不是传统的二进制可执行文件--虽然他们有着相同的扩展名。

我们可以很方便地解剖这个 exe 文件以获得中间语言,利用文件 ildasm.exe(以下简称 ildasm),该文件可以在类似 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin 的位置找到(需要安装 .NET SDK)。

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin>ildasm /output:E:\foo.il
 E:\foo.exe
  • 由于网页显示原因,上述内容被分隔为两行,实际为一行。
  • 注意这里是 /output:,不是 /out:。
  • 一般输出两个文件 foo.il 和 foo.res。
相关文章
文章评论