1.5 用.NET 4.6编译
对源文件运行C#命令行编译器(csc.exe),就可以编译这个程序,如下所示:
csc HelloWorld.cs
如果想使用csc命令在命令行上编译代码,就应该知道,.NET命令行工具(包括csc)只有设置了某些环境变量后才可用。根据安装.NET(和Visual Studio)的方式,计算机可能设置了这些环境变量,也可能没有设置。
注意:如果没有设置环境变量,则有3个选择。第一个选择是在调用csc可执行文件时添加路径。它位于% ProgramFiles %\MsBuild\14.0\Bin\csc.exe。如果安装了dotnet工具,则csc在%ProgramFiles%\dot.net\bin\csc.exe上。第二个选择是在运行csc前,从命令提示符下运行批处理文件% Microsoft Visual Studio 2015%\Common7\vsvars32.bat,其中%Microsoft Visual Studio 2015%是安装Visual Studio 2015的文件夹。第三个选择、也是最容易的方式,是使用Visual Studio 2015命令提示符代替Windows命令提示符。要在“开始”菜单中找到Visual Studio 2015命令提示符,选择Programs | Microsoft Visual Studio 2015 | Visual Studio Tools。Visual Studio 2015命令提示符只是一个命令提示符窗口,它打开时会自动运行vsvars32.bat。
编译代码,生成一个可执行文件HelloWorld.exe,在命令行上可以运行它。也可以在Windows资源管理器中运行它,就像运行任何其他可执行文件一样。试一试:
> csc HelloWorld.cs Microsoft (R) Visual C# Compiler version 1.1.0.51109 Copyright (C) Microsoft Corporation. All rights reserved. > HelloWorld Hello World!
以这种方式编译可执行程序,会生成一个程序集,其中包含IL(中间语言)代码。程序集可以使用中间语言反汇编程序(Intermediate Language Disassembler, IL DASM)工具读取。如果运行ildasm.exe,打开HelloWorld.exe,会发现程序集包含一个Program类型和一个Main()方法,如图1-3所示。
双击树视图中的MANIFEST节点,显示程序集的元数据信息(如图1-4所示)。这个程序集会利用mscorlib程序集(因为Console类位于mscorlib程序集里)、一些配置和HelloWorld程序集的版本。
图1-3
图1-4
双击Main()方法,显示该方法的IL代码(如图1-5所示)。不管编译Hello, World代码的什么版本,结果都是一样的。都是调用mscorlib程序集中定义的System.Console.WriteLine方法,传递字符串,之后加载字符串Hello, World!。CLR的一个特性是JIT编译器。运行该应用程序时,JIT编译器把IL代码编译为本地代码。
图1-5