使用.NET命令行编译器编译项目(如ASP.NET、C#等)(4)

当在命令行编译多个 C# 文件时,可以分别列出每个文件 — 如果您希望编译包含在单个目录中的 C# 文件的子集,则这可能有所帮助。假设我们已经创建了另外一个名为 asmInfo.cs 的 C# 代码文件(保存在同一目录中),它定义了下列程序集级别属性以描述我们的代码库:

// asmInfo.cs using 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 文件放到一个名为 \AsmInfo 的新的子目录(如图 3 所示)中。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

图 3. 新的 \AsmInfo 子目录

要告诉 C# 编译器编译位于根目录以及 AsmInfo 子目录中的所有 C# 文件,请使用 /recurse 选项:

csc /t:library /out:MyCodeLibrary.dll /recurse:AsmInfo /doc:myDoc.xml *.cs

这里,/recurse 已经用特定子目录的名称限定。要指定多个子目录,我们可以再次使用通配符语法。如果我们要将 simpleType.cs 文件移到一个新的名为 Core 的子目录中,则我们可以用以下命令集编译所有子目录中的所有 C# 文件:

csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs

在任何一种情况下,输出都是相同的。

使用 /doc 生成 XML 文档文件

SimpleType 类已经配备了各种 XML 元素。就像您很可能知道的那样,C# 编译器将使用这些带有三条斜杠的代码注释生成 XML 文档文件。要告诉 csc.exe 创建这样的文件,必须提供 /doc 选项,并且用要生成的文件的名称修饰它:

csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs /doc:myDoc.xml

在应用程序目录中,您现在应当看到一个名为 myDoc.xml 的新文件。如果您打开该文件,则会发现您的类型以 XML 的形式进行了说明,如图 5 所示。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

图 5. XML 形式的类型文档

如果您希望了解 C# XML 代码注释的详细信息,则请参阅文章 XML Comments Let You Build Documentation Directly From Your Visual Studio .NET Source Files

使 /keyfile 建立强名称

当前示例的最后一项任务是为我们的程序集分配一个强名称。在 .NET 1.1 下,创建强命名程序集需要使用 [AssemblyKeyFile] 属性。尽管这样做就很好了,但 C# 2.0 编译器现在提供了 /keyfile 标志,以指定强名称密钥文件 (*.snk) 的位置。

在驱动器 C 上创建一个名为 MyKeyPair 的新文件夹,然后使用命令提示更改至该目录。接下来,使用 sn.exe 实用工具的 â“k 选项创建一个名为 myKeyPair.snk 的新密钥对。

sn -k myKeyPair.snk

要使用 csc.exe 对 MyCodeLibrary.dll 进行强命名,请发出以下命令集:

csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs /doc:myDoc.xml /keyfile:C:\MyKeyPair\myKeypair.snk

要验证该程序集的确具有强名称,请使用安全实用工具 (secutil.exe) 和 â“s 选项显示强名称信息:

secutil /sMyCodeLibrary.dll

您应当发现,程序集清单中记录的公钥值被显示为如图 6 所示的输出。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

图 6. 公钥值的输出

C# 2.0 编译器确实还有其他一些以强名称为中心的标志(/delaysign 和 /keycontainer),您可能希望在空闲时加以研究。特别地,如果您希望启用延迟签名,则请使用 /delaysign 选项。


使用 C# 响应文件

尽管通过命令行工作时可以体验到其与生俱来的优势,但没有人能够否认键入数十个编译器选项可能导致手指抽筋和录入错误。为了有助于减轻这两个问题,C# 编译器支持使用响应文件。

所有命令提示都允许您使用 Up 和 Down 箭头键遍历以前的命令。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjfzjj.html