程序集链接器 (Al.exe)

更新:2007 年 11 月

程序集链接器从一个或多个文件(可以是模块,也可以是资源文件)生成一个具有程序集清单的文件。模块是不含程序集清单的“Microsoft 中间语言”(MSIL) 文件。

说明:

为了避免受到 Windows Vista 计算机上虚拟化的影响,程序集必须包含一个指定所请求执行级别的 win32 清单。从命令行直接使用 al.exe 时,可以将该清单嵌入 win32 资源文件中或者使用 mt.exe 在生成过程的后期追加该清单。在 Visual Studio 2008 中,C# 和 Visual Basic 编译器都自动将 win32 清单嵌入程序集中。有关更多信息,请参见 /win32manifest(导入自定义 Win32 清单文件)(C# 编译器选项)

al sources options

参数

您可以指定以下一个或多个 sources。

说明

file[,target]

将 file(模块)的内容复制到 target 指定的文件名。复制后,Al.exe 将 target 编译为程序集。

/embed[resource]:file[,name[,private]]

将 file 指定的资源嵌入到包含程序集清单的映像中;Al.exe 将 file 的内容复制到可移植可执行 (PE) 映像中。

name 参数是资源的内部标识符。默认情况下,资源在程序集中是公共的(对于其他程序集可见)。指定 private 会使该资源对于其他程序集不可见。

例如,如果 file 是由资源文件生成器 (Resgen.exe) 创建或在开发环境中创建的 .NET Framework 资源文件,则可使用 System.Resources 中的成员来访问它。有关更多信息,请参见 ResourceManager。对于所有其他资源,请使用 Assembly 中的 GetManifestResource* 方法在运行时访问资源。

如果只将资源文件传递给 Al.exe,则输出文件会是附属资源程序集。

/link[resource]:file[,name[,target[,private]]]

将资源文件链接到程序集。file 指定的资源成为程序集的组成部分;不复制该文件。file 参数可以是任何文件格式。例如,可以指定本机 DLL 作为 file 参数。这将使本机 DLL 成为程序集的组成部分,从而可将它安装到全局程序集缓存中,并且可以通过该程序集中的托管代码访问它。也可以通过使用 /linkresource 编译器选项实现该目的。有关更多信息,请参见 /linkresource(链接到 .NET Framework 资源)(C# 编译器选项)

name 参数是资源的内部标识符。target 参数指定 Al.exe 将 file 复制到其中的路径和文件名。复制后,Al.exe 将 target 编译为程序集。默认情况下,资源在程序集中是公共的(对于其他程序集可见)。指定 private 会使该资源对于其他程序集不可见。

例如,如果 file 是由资源文件生成器 (Resgen.exe) 创建或在开发环境中创建的 .NET Framework 资源文件,则可使用 System.Resources 命名空间中的成员来访问它。有关更多信息,请参见 ResourceManager。对于所有其他资源,请使用 Assembly 类中的 GetManifestResource* 方法在运行时访问资源。

如果只将资源文件传递给 Al.exe,则输出文件会是附属资源程序集。

您可以指定以下 options;您必须指定 /out

选项

说明

/algid:id

指定一种算法以散列多文件程序集中的所有文件,包含程序集清单的文件除外。默认算法是 CALG_SHA1。有关其他算法,请参见 Platform SDK 文档中的 ALG_ID。对于 .NET Framework 的第一版,只有 CALG_SHA1 和 CALG_MD5 是有效的。

哈希值存储在程序集清单的文件表中。在安装和加载时,会对照相应的哈希值检查程序集文件。

还可以将此选项指定为任何模块的源代码中的自定义属性 (AssemblyAlgorithmIdAttribute)。

/base[address]:addr

指定一个地址,运行时在用户计算机上在该地址加载 DLL。如果指定 DLL 的基址,而不是让操作系统在进程空间内重新定位 DLL,应用程序的加载速度就会快一些。

/bugreport:filename

创建包含有关报告 bug 的信息的文件 (filename)。

/comp[any]:text

为程序集中的 Company 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res,text 就会在 Microsoft Windows 资源管理器中显示为文件的 Company 属性。如果指定 /win32res,所指定资源文件中的公司信息就会在 Windows 资源管理器中显示为 Company 属性。

如果文本是空字符串 (""),Win32 Company 资源就会显示为一个空格。

如果指定 /win32res/company 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyCompanyAttribute)。

/config[uration]:text

为程序集中的 Configuration 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果文本是空字符串,Win32 Configuration 资源就会显示为一个空格。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyConfigurationAttribute)。

/copy[right]:text

为程序集中的 Copyright 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/copyright 在 Windows 资源管理器中将显示为 Win32 Copyright 资源。

如果文本是空字符串,Win32 Copyright 资源就会显示为一个空格。

如果指定 /win32res/copyright 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyCopyrightAttribute)。

/c[ulture]:text

指定要与程序集相关联的区域性字符串。区域性的有效值是名为“Tags for the Identification of Languages”(语言标识的标记)的 Internet Requests for Comments (RFC)(Internet 注释请求)文档 1766 定义的那些值。

如果 text 包含空格,则将字符串放置在双引号 (" ") 中。没有默认的区域性字符串。使用反射可以查看此字符串。

有关有效的 text 字符串的信息,请参见 CultureInfo

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyCultureAttribute)。

/delay[sign][+|-]

指定程序集是完全签名的还是部分签名的。如果需要完全签名的程序集,则使用 /delaysign-。如果仅想将公钥包含在程序集中,则使用 /delaysign+

在请求完全签名的程序集时,Al.exe 散列包含清单(程序集元数据)的文件,并使用私钥对该散列签名。产生的数字签名存储在包含清单的文件中。在对程序集延迟签名时,Al.exe 并不计算和存储签名,而只是在文件中保留空间以便以后可以添加签名。

默认值为 /delaysign-

如果不与 /keyfile/keyname 一起使用,/delaysign 选项将无效。

例如,使用 /delaysign+ 将允许测试人员把程序集放入全局缓存中。测试完成后,可以通过使私钥包含在程序集中对程序集进行完全签名。

说明:

使用全局程序集缓存工具 (Gacutil.exe) 将延迟签名的程序集放入全局缓存中之前,请使用强名称工具 (Sn.exe) 注册该程序集,以跳过验证。例如 Sn.exe –Vr delaySignedAssembly。仅将它用于开发。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyDelaySignAttribute)。

/descr[iption]:text

为程序集中的 Description 字段指定一个字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/description 在 Windows 资源管理器中就会显示为 Win32 Comments 资源。

如果文本是空字符串,Win32 Comments 资源就会显示为一个空格。

如果指定 /win32res/description 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (Description)。

/e[vidence]:file

使用资源名称 Security.Evidence 将 file 嵌入程序集中。

对常规资源不能使用 Security.Evidence。

/fileversion:version

为程序集中的 File Version 字段指定字符串。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/fileversion 就会作为 Win32 File Version 资源使用。如果不指定 /fileversion,Win32 File Version 资源就会被 Win32 Assembly Version 资源填充。

如果指定 /win32res/fileversion 就不会影响 Win32 资源。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyFileVersionAttribute)。

/flags:flags

为程序集中的 Flags 字段指定一个值。flags 的可能值有:

0x0000

程序集是相邻兼容的。

0x0010

程序集无法与其他版本在同一应用程序域中一起执行。

0x0020

程序集无法与其他版本在同一进程中一起执行。

0x0030

程序集无法与其他版本在同一计算机上一起执行。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyFlagsAttribute)。

/fullpaths

使 Al.exe 对在错误信息中报告的任何文件使用绝对路径。

/help

显示该工具的命令语法和选项。

/keyf[ile]:filename

指定一个文件 (filename),该文件包含密钥对,或只包含用于对程序集进行签名的公钥。编译器在程序集清单中插入公钥,然后使用私钥对最终的程序集签名。有关生成密钥文件和将密钥对安装到密钥容器中的信息,请参见强名称工具 (Sn.exe)

如果使用延迟签名,此文件通常会具有公钥而不是私钥。

(密钥对的)公钥信息显示在程序集的 .publickey 字段中。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyKeyFileAttribute)。

如果在同一编译中同时指定了 /keyfile/keyname(通过命令行选项或者通过自定义属性),Al.exe 将首先尝试用 /keyname 指定的容器。如果成功,则使用密钥容器中的信息对程序集签名。如果 Al.exe 没有找到密钥容器,它将尝试由 /keyfile 指定的文件。如果成功,则使用密钥文件中的信息对程序集签名,并且将密钥信息安装到密钥容器中(类似于 Sn.exe 中的 -i 选项),以便在下一次编译中,/keyname 选项可以生效。

/keyn[ame]:text

指定保存密钥对的容器。这样将会通过将公钥插入程序集清单来对程序集签名(为它指定一个强名称)。然后 Al.exe 使用私钥对最终程序集签名。

使用 Sn.exe 生成密钥对。

密钥信息在程序集的 .publickey 字段中显示。

如果有嵌入的空格,请用双引号 (" ") 将 text 引起来。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyKeyNameAttribute)。

/main:method

指定方法的完全限定名称 (class.method),以用作将模块转换为可执行文件时的入口点。

/nologo

调用 Al.exe 时,在命令行取消显示版权标志或徽标。

/out:filename

指定 Al.exe 产生的文件的名称,这是必选项。

/platform:text

限制可以运行该代码的平台;必须为 x86、Itanium、x64 或 anycpu(默认值)之一。

/prod[uct]:text

为程序集中的 Product 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/product 将在 Windows 资源管理器中显示为 Win32 Product Name 资源。

如果文本是空字符串,Win32 Product Name 资源就会显示为一个空格。

如果指定 /win32res/product 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyProductAttribute)。

/productv[ersion]:text

为程序集中的 Product Version 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/productversion 将作为 Win32 Product Version 资源使用。如果不指定 /productversion,Win32 Product Version 资源就会被 Win32 File Version 资源填充。

如果指定 /win32res/productversion 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyInformationalVersionAttribute)。

/t[arget]:lib[rary] | exe | win[exe]

指定输出文件的文件格式:lib[rary](代码库)、exe(控制台应用程序)或 win[exe](基于 Windows 的应用程序)。默认值为 lib[rary]。

/template:filename

指定程序集 filename,除区域性字段之外的所有程序集元数据都从该程序集继承。

使用 /template 创建的程序集将是附属程序集。

/title:text

为程序集中的 Title 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/title 就会在 Windows 资源管理器中显示为 Win32 Description 资源,外壳程序将其用作应用程序的友好名称。如果某个文件类型有多个支持应用程序,则该字符串也会出现在此文件类型的快捷菜单的“打开方式”子菜单中。

如果文本是空字符串,Win32 Description 资源就会显示为一个空格。

如果指定 /win32res/title 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyTitleAttribute)。

/trade[mark]:text

为程序集中的 Trademark 字段指定字符串。如果 text 包含空格,则将字符串放置在双引号 (" ") 中。此字符串是程序集上的自定义属性,可以使用反射进行查看。

如果不指定 /win32res/trademark 在 Windows 资源管理器中就会显示为 Win32 Trademark 资源。

如果文本是空字符串,Win32 Trademark 资源就会显示为一个空格。

如果指定 /win32res/trademark 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyTrademarkAttribute)。

/v[ersion]:version

指定此程序集的版本信息。版本字符串的格式为 major.minor.build.revision。默认值为 0。

如果指定 /version,则必须指定 major。如果指定 major 和 minor,则可以指定一个星号 (*) 作为 build。这样会使 build 等于从当地时间 2000 年 1 月 1 日算起的天数,使 revision 等于从当地时间 2000 年 1 月 1 日午夜算起的秒数的一半。

如果指定 major、minor 和 build,则可以指定一个星号作为 revision。这会使 revision 等于从当地时间 2000 年 1 月 1 日午夜算起的秒数的一半。

概括而言,有效的版本字符串如下:

X

X.X

X.X.*

X.X.X

X.X.X.*

X.X.X.X

其中 X 是 0 至 65534 之间(不含 65535)的任何一个无符号短常数。

如果不指定 /win32res/version 将作为 Win32 Assembly Version 资源使用。

如果不指定 /win32res/productversion/fileversion/version 将用于 Assembly Version、File Version 和 Product Version Win32 资源。

如果指定 /win32res/version 将不会影响 Win32 资源信息。

还可以将此选项指定为任何 MSIL 模块的源代码中的自定义属性 (AssemblyVersionAttribute)。

/win32icon:filename

在程序集中插入 .ico 文件。.ico 文件在 Windows 资源管理器中赋予输出文件所需的外观。

/win32res:filename

在输出文件中插入 Win32 资源(.res 文件)。Win32 资源文件可以用资源编译器创建。编译 Visual C++ 程序时将调用资源编译器;.res 文件是从 .rc 文件创建的。

@filename

指定包含 Al.exe 命令的响应文件。

响应文件中的命令既可以每行显示一个,也可以显示在同一行中,用一个或多个空格分隔。

/?

显示该工具的命令语法和选项。

备注

所有 Visual Studio 编译器都产生程序集。但是,如果您有一个或多个模块(没有清单的元数据),则可使用 Al.exe 在单独的文件中创建带清单的程序集。

要在缓存中安装程序集,从缓存中删除程序集,或列出缓存内容,请使用全局程序集缓存工具 (Gacutil.exe)

示例

以下命令使用 t2.netmodule 模块中的程序集创建可执行文件 t2a.exe。入口点是 MyClass 中的 Main 方法。

al t2.netmodule /target:exe /out:t2a.exe /main:MyClass.Main

请参见

参考

.NET Framework 工具

Al.exe 工具错误和警告

强名称工具 (Sn.exe)

全局程序集缓存工具 (Gacutil.exe)

SDK 命令提示

其他资源

使用程序集编程