表 4. /target 标志的变体
目标修饰 | 定义 |
/target:exe | 创建基于控制台的程序集。如果未指定 /target 选项,则这是默认选项。 |
/target:winexe | 创建基于 Windows 窗体的可执行程序集。尽管您可以使用 /target:exe 创建 Windows 窗体应用程序,但控制台窗口将在主窗体的后台隐现。 |
/target:library | 用于生成 .NET 代码库 (*.dll)。 |
/target:module | 创建将成为多文件程序集的一部分的模块。 |
为了说明使用 csc.exe 的输入/输出选项的过程,我们将创建一个强命名的单文件程序集 (MyCodeLibrary.dll),以定义一个名为 SimpleType 的类类型。为了展示 /doc 选项的作用,我们还将生成一个 XML 文档文件。
首先,请在驱动器 C 上创建一个名为 MyCSharpCode 的新文件夹。在该文件夹中,创建一个名为 MyCodeLibrary 的子目录。使用您选择的文本编辑器(notepad.exe 就完全合乎需要)输入以下代码,并将该文件保存为刚刚创建的 C:\MyCSharpCode\MyCodeLibrary 目录中的 simpleType.cs。
// simpleType.csusing System;namespace MyCodeLibrary{ /// <summary> /// Simple utility type. /// </summary> public class SimpleType { /// <summary> /// Print out select environment information /// </summary> public static void DisplayEnvironment() { Console.WriteLine("Location of this program: {0}", Environment.CurrentDirectory); Console.WriteLine("Name of machine: {0}", Environment.MachineName); Console.WriteLine("OS of machine: {0}", Environment.OSVersion); Console.WriteLine("Version of .NET: {0}", Environment.Version); } }}
现在,打开命令提示,并且使用 cd(更改目录)命令导航到 simpleType.cs 文件的位置 (C:\MyCSharpCode\MyCodeLibrary):
cd MyCSharpCode\MyCodeLibrary
或
cd C:\MyCSharpCode\MyCodeLibrary
要将该源代码文件编译为名为 MyCodeLibrary.dll 的单文件程序集,请指定以下命令集:
csc /t:library /out:MyCodeLibrary.dll simpleType.cs
此时,您应当在应用程序目录中具有一个全新的 .NET 代码库,如图 2 所示。
图 2. 新的 .NET 代码库
当在命令行编译多个 C# 文件时,可以分别列出每个文件 — 如果您希望编译包含在单个目录中的 C# 文件的子集,则这可能有所帮助。假设我们已经创建了另外一个名为 asmInfo.cs 的 C# 代码文件(保存在同一目录中),它定义了下列程序集级别属性以描述我们的代码库:
// asmInfo.csusing System;using System.Reflection;// A few assembly level attributes.[assembly:AssemblyVersion("1.0.0.0")][assembly:AssemblyDescription("Just an example library")][assembly:AssemblyCompany("Intertech Training")]
要只编译 simpleType.cs 和 asmInfo.cs 文件,请键入:
csc /t:library /out:MyCodeLibrary.dll simpleType.cs asmInfo.cs
正如您可能希望的那样,csc.exe 支持通配符表示法。因而,要编译单个目录中的所有文件,请仅将 *.cs 指定为输入选项:
csc /t:library /out:MyCodeLibrary.dll *.cs
使用 /recurse 指定子目录
在创建应用程序时,您肯定喜欢为您的项目创建逻辑目录结构。您可以通过将代码文件放到特定的子目录(\Core、\AsmInfo、\MenuSystem 等等)中对它们进行组织,而不是将多达 25 个文件转储到名为 myApp 的单个目录中。尽管我们的当前示例只包含几个文件,但假设您将 AsmInfo.cs 文件