程序集链接器 (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+ 将允许测试人员把程序集放入全局缓存中。测试完成后,可以通过使私钥包含在程序集中对程序集进行完全签名。
还可以将此选项指定为任何 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 的可能值有:
还可以将此选项指定为任何 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