Al.exe(程序集链接器)

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

备注

从 Visual Studio 2008 开始,C# 和 Visual Basic 编译器都自动将 Win32 清单嵌入到程序集中。 有关详细信息,请参阅 -win32manifest(C# 编译器选项)

此工具会自动随 Visual Studio 一起安装。 若要运行该工具,请使用 Visual Studio 开发人员命令提示或 Visual Studio 开发人员 PowerShell

在命令提示符处,键入以下内容:

语法

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(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。 有关其他算法,请参见平台 SDK 文档中的 ALG_ID。 对于 .NET Framework 的第一版,只有 CALG_SHA1 和 CALG_MD5 是有效的。

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

还可以将此选项指定为任何模块的源代码中的自定义特性 (AssemblyAlgorithmIdAttribute)。
/base[address]: addr 指定一个地址,运行时在用户计算机上在该地址加载 DLL。 如果指定 DLL 的基址,而不是让操作系统在进程空间内重新定位 DLL,则应用程序的加载速度会更快。
/bugreport: filename 创建包含有关报告 Bug 的信息的文件 (filename)。
/comp[any]: text 为程序集中的“公司”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

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

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyCompanyAttribute)。
/config[uration]: text 为程序集中的“配置”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果文本是空字符串,则 Win32“配置”资源将显示为一个空格。

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyConfigurationAttribute)。
/copy[right]: text 为程序集中的“版权”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /copyright 在文件资源管理器中将显示为 Win32“版权”资源。

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyCopyrightAttribute)。
/c[ulture]: text 指定要与程序集关联的区域性字符串。 区域性的有效值是名为“Tags for the Identification of Languages”的 Internet Requests for Comments (RFC) 文档 1766 定义的那些值。

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyCultureAttribute)。
/delay[sign][+ or -] 指定程序集是完全签名的还是部分签名的。 如果需要完全签名的程序集,请使用 /delaysign- 。 如果仅需要将公钥包含在程序集中,则使用 /delaysign+

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

默认值为 /delaysign-

除非与 /keyfile/keyname 一同使用,否则 /delaysign 选项将不起作用。

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyDelaySignAttribute)。
/descr[iption]: text 为程序集中的 Description 字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /description 在文件资源管理器中将显示为 Win32“注释”资源。

如果文本是空字符串,则 Win32“注释”资源将显示为一个空格。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(Description)。
/e[vidence]: file 使用 Security.Evidence 的资源名将 file 嵌入程序集中。

不能对常规资源使用 Security.Evidence。
/fileversion: version 为程序集中的“文件版本”字段指定字符串。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /fileversion 将用作 Win32“文件版本”资源。 如果不指定 /fileversion,则 Win32“文件版本”资源将由 Win32“程序集版本”资源填充。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyFileVersionAttribute)。
/flags: flags 为程序集中的 Flags 字段指定一个值。 flags 的可能的值有:

0x0000
程序集是相邻兼容的。

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

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyFlagsAttribute)。
/fullpaths 使 Al.exe 对错误消息中报告的任何文件使用绝对路径。
/help 显示该工具的命令语法和选项。
/keyf[ile]: filename 指定一个文件 (filename),该文件包含密钥对或只包含用于对程序集进行签名的公钥。 编译器在程序集清单中插入公钥,然后使用私钥对最终的程序集进行签名。 有关生成密钥文件并将密钥对安装到密钥容器中的信息,请参见强名称工具 (Sn.exe)

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

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

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

如果在同一编译中同时指定 /keyfile 和 /keyname(通过命令行选项或通过自定义属性),则 Al.exe 将首先尝试用 /keyname 指定的容器 。 如果成功,则使用密钥容器中的信息对程序集签名。 如果 Al.exe 没有找到密钥容器,它将尝试用 /keyfile 指定的文件。 如果成功,则使用密钥文件中的信息对程序集签名,并且将密钥信息安装到密钥容器中(类似于 Sn.exe 中的 -i 选项),以便在下一次编译中,/keyname 选项将生效。
/keyn[ame]: text 指定保存密钥对的容器。 这样将会通过将公钥插入程序集清单来对程序集签名(为它指定一个强名称)。 然后,Al.exe 使用私钥对最终程序集进行签名。

使用 Sn.exe 生成密钥对。

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

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyKeyNameAttribute)。
/main: method 指定方法的完全限定名称 (class.method),以用作将模块转换为可执行文件时的入口点。
/nologo 调用 Al.exe 时,在命令行取消显示横幅或徽标。
/out: filename 指定 Al.exe 生成的文件的名称。 这是必需选项。
/platform: text 限制可以运行该代码的平台;必须为 x86、Itanium、x64、anycpu(默认值)之一,或 anycpu32bitpreferred。
/prod[uct]: text 为程序集中的“产品”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /product 在文件资源管理器中将显示为 Win32“产品名称”资源。

如果文本是空字符串,则 Win32“产品名称”资源将会显示为一个空格。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyProductAttribute)。
/productv[ersion]: text 为程序集中的“产品版本”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /productversion 将用作 Win32“产品版本”资源。 如果不指定 /productversion,则 Win32“产品版本”资源将由 Win32“文件版本”资源填充。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyInformationalVersionAttribute)。
/t[arget]: lib[rary] | exe | win[exe] 指定输出文件的文件格式:lib[rary](代码库)、exe(控制台应用程序)或 win[exe](基于 Windows 的应用程序)。 默认为 lib[rary]
/template: filename 指定程序集 filename,除区域性字段之外的所有程序集元数据都从该程序集继承。

使用 /template 创建的程序集将成为附属程序集。
/title: text 为程序集中的“标题”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

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

如果文本是空字符串,则 Win32“说明”资源将显示为一个空格。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyTitleAttribute)。
/trade[mark]: text 为程序集中的“商标”字段指定字符串。 如果 text 包含空格,则将字符串放置在双引号 (" ") 中。 此字符串是程序集上的自定义特性,可以使用反射进行查看。

如果不指定 /win32res,则 /trademark 在文件资源管理器中将显示为 Win32“商标”资源。

如果文本是空字符串,则 Win32“商标”资源将显示为一个空格。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyTrademarkAttribute)。
/v[ersion]: version 指定此程序集的版本信息。 版本字符串的格式为 major.minor.build.revision。默认值为 0。

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

如果指定 majorminorbuild,则可以指定一个星号作为 revision。 这会使 revision 等于从当地时间当地午夜算起的秒数的一半。

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

X

X.X

X.X.*

X.X.X

X.X.X.*

X.X.X.X

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

如果不指定 /win32res,则 /version 将用作 Win32“程序集版本”资源。

如果不指定 /win32res/productversion/fileversion,则 /version 将用于“程序集版本”、文件版本和“产品版本”Win32 资源。

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

也可以在任何 CIL 模块的源代码中将此选项指定为自定义属性(AssemblyVersionAttribute)。
/win32icon: filename 在程序集中插入 .ico 文件。 .ico 文件在文件资源管理器中赋予输出文件所需的外观。
/win32res: filename 在输出文件中插入 Win32 资源(.res 文件)。 可使用资源编译器创建 Win32 资源文件。 在编译 Visual C++ 程序时会调用资源编译器;.res 文件是从 .rc 文件创建的。
@filename 指定包含 Al.exe 命令的响应文件。

响应文件中的命令既可以每行显示一个,也可以显示在同一行中,用一个或多个空格分隔。
/? 显示该工具的命令语法和选项。

备注

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

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

错误和警告

下表列出了 Al.exe 生成的错误。

错误 描述
al1001 内部编译器错误

尝试确定 Al.exe 是否因为无法分析意外语法而失败。 然后,请与 Microsoft 产品支持服务联系。
al1002 内存不足

Al.exe 内存不足,已停止。 增加可用内存量。
al1003 编译器选项“option”后面必须有参数

Al.exe 预期一个自变量被传递到命令行选项。 例如,如果指定 /algid: ,则必须传递算法标识符。
al1004 意外的公共语言运行时初始化错误 --“reason”

Al.exe 报告了 Visual Studio 的安装错误,或者特定原因导致的公共语言运行时错误。
al1005 文件“file”太大,无法打开

Al.exe 打开的所有文件都必须小于 4 GB。
al1006 已包含响应文件“file”

在命令行上多次指定了同一个响应文件 (@file)。 响应文件只能包含一次。
al1007 打开响应文件“file”时出错 —“reason”

Al.exe 因特定原因无法打开指定的响应文件。
al1008 缺少“option”命令行选项的文件规范

Al.exe 预期一个文件被传递到命令行选项。 例如,如果指定 /out 选项,则必须指定文件。
al1009 无法打开“file”以进行写入

Al.exe 无法写入文件,例如输出程序集文件。 磁盘可能已满,该文件可能是只读的,或者你可能不具有对该文件的权限。
al1010 命令行语法错误:“选项”选项缺少“:text”

Al.exe 预期一个自变量被传递到命令行选项。 例如,如果指定 /title 选项,则必须传递字符串。
al1011 文件“file”是可执行文件,无法作为文本文件打开

在预期为文本文件之处指定了二进制文件。 例如,如果将二进制文件作为响应文件传递到命令行上,将发生此错误。
al1012 “value”不是选项“option”的有效设置

意外值被传递到命令行选项。 例如,如果将无效值指定到 /target 选项,则将发生此错误。
al1013 无法识别的命令行选项:“option”

已指定无效的命令行选项。
al1014 意外的初始化错误 —“reason”

Al.exe 检测到 COM 初始化失败。 这可能是由于缺少内存所致,但更可能是因系统 DLL 文件所致。 如果运行任何自动化感知或 COM 感知的程序(如 Microsoft Visual Studio),应会发生类似的错误。

重新安装操作系统。
al1015 无法找到消息文件“alinkui.dll”

Al.exe 需要 Alinkui.dll 。 确保此文件位于你的路径。 如有必要,请从产品 CD 将其复制。
al1016 未指定有效输入文件

Al.exe 要求不具有程序集信息的一个或多个输入文件。
al1017 未指定目标文件名

缺少指定目标文件名必需的 /out 选项。
al1018 无法加载所需的文件“file”

无法加载某些 DLL 文件。 重新安装 Visual Studio 或 Windows SDK。
al1019 创建程序集时元数据失败 — 原因

由于特定原因,程序集生成中断。 例如,如果未找到用 /win32res 选项指定的文件,将发生此错误。
al1020 忽略包含的程序集“file”

指定了包含程序集的输入文件。 Al.exe 输入文件无法包含程序集。
al1021 “setting”: 重写以前的设置

模块具有特定设置的值,该值可能是通过自定义属性分配,并通过使用 Al.exe 命令行选项传递的值进行重写。
al1022 读取嵌入资源“file”时出错 — 原因

由于特定原因,Al.exe 无法读取传递到 /embedresource 选项的文件。
al1023 嵌入资源“file”时出错 — 原因

由于特定原因,操作系统无法在程序集中嵌入资源文件。
al1025 ComType 记录“record”指向无效的文件记录“record”

输入模块中的元数据无效。 必须修复生成该模块的工具。
al1026 指定的版本“version”无效

查看有关有效格式的 /version 选项的信息。
al1028 密钥文件“file”缺少签名所需的私钥

已将仅包含公钥的密钥文件传递到 /keyfile 选项。 如以下命令所示,使用强名称工具 (Sn.exe) 以生成同时具有公钥和私钥的文件。

sn -k keypair.snk.
al1029 密钥容器名称“container”不存在

传递到 /keyname 选项的值不是有效的容器。 使用强名称工具 (Sn.exe) 创建容器。
al1030 未正确安装加密服务或其不具有合适的密钥提供程序

可能需要重新安装操作系统,或者安装一些用于创建该密钥的加密实用工具。
al1031 读取图标“file”时出错 — 原因

由于特定原因,Al.exe 无法读取传递到 /win32icon 选项的文件
al1032 为“file”生成资源时出错 — 原因

由于没有足够的磁盘空间或某些其他错误,Al.exe 无法创建文件。 当指定 /win32icon 选项(生成 .ico 文件)或不指定 /win32res 选项(生成具有资源信息的文件)时,将发生此错误。

如果无法解决文件生成问题,则使用 /win32res,可指定可以包含版本或位图(图标)信息的文件。
al1033 多次使用不同值指定了程序集自定义特性“attribute”

已将不同的值传递给源模型中同一自定义属性的两个匹配项,此源模型指定为 Al.exe 的输入。
al1034 无法复制或重命名程序集“file”

使用既可使用户指定输入文件,又可复制输入文件的 Al.exe 语法时,会产生名称冲突,导致编译器停止。 例如,如果指定 input.dll,somename.dll /out:somename.dll,将产生此错误。
al1035 库不能有一个入口点

不能同时指定 /target:lib 选项(默认)和 /main 选项。
al1036 可执行应用程序所需的入口点

当使用 /target:exe/target:win 选项时,还必须指定 /main 选项。
al1037 无法找到入口点方法“main”

Al.exe 在 /main 选项指定的位置找不到 Main 方法。
al1039 全局程序集缓存管理器的初始化失败 — 原因

重新安装 Visual Studio 或 Windows SDK。
al1040 未能将程序集安装到缓存 — 原因

仅签名的程序集可安装到缓存中。 有关详细信息,请参阅全局程序集缓存
al1041 “method”: 不能为入口点,因为签名或可见性不正确,或者它是泛型

使用 /main 选项指定了一种方法,但该方法不是静态的,不会返回 intvoid,该方法是泛型类型,或者具有无效自变量。
al1042 “exe”:不能向 EXE 添加模块

已将不具有程序集的 .exe 文件指定为 Al.exe 的输入文件 。 Al.exe 只能接受不具有程序集的 .dll 文件作为输入文件 。
al1043 清单文件名“name”不能和任何模块相同

使用 /out 选项指定的名称不能与任何一个指定为 Al.exe 的输入文件的名称相同。
al1044 读取密钥文件“file”时出错 — 原因

从使用 /keyfile 或 AssemblyKeyFileAttribute 指定的文件打开或读取时出错。
al1045 文件名“file”太长或无效

将长于 260 个字符的文件名传递给 Al.exe。 选择字符较少或路径较短的文件名或重命名该文件。
al1046 此程序集中已使用了资源标识符“ID”

内嵌或链接的两个资源具有相同的标识符或名称(第二个参数)。 删除或重命名其中一个冲突资源。
al1047 导入文件“file”时出错 — 原因

由于特定原因,无法打开模块文件。
al1048 导入程序集“assembly”的模块“module”时出错 — 原因

打开多文件程序集的非清单文件时出错。 此错误不直接由 Al.exe 发出,但可将它以编程的方式传递给使用 Al.exe 的进程 。
al1049 不能自动生成日期在 2000 年 1 月 1 日之前的生成版本号和修订版本号

你计算机上的系统时钟设置为早于 2000 年 1 月 1 日的日期。
al1050 不再支持使用“旧功能”;请改为使用“新功能”

以前由 Al.exe 支持的一项功能现已过时。 请改用推荐的功能。
al1051 发出“attribute”特性时出错 — 原因

由于特定原因,Al.exe 未处理一项程序集自定义属性。
al1052 文件“filename”不是程序集

使用 /template 指定的文件必须包含程序集元数据。 此错误指示 /template 指定的文件未包含程序集。
al1053 为“option”指定的版本“version”不是常规的“major.minor.build.revision”格式

Al.exe 检测到使用 /fileversion 或 /productversion 选项指定的格式不正确的版本信息 。
al1054 为“option”指定的版本“version”不是常规的“major.minor.build.revision”格式

Al.exe 检测到使用 SatelliteContractVersionAttribute 指定的格式不正确的版本信息。
al1055 引用的程序集“filename”没有强名称

当构建具有强名称的程序集,并且引用不具有强名称的程序集时,会发出此错误。 若要解决此问题,必须再生成具有强名称的程序集,或通过使用 sn.exe 将强名称附加到程序集(请参阅 sn.exe 的文档) 。

此错误通常发生在通过包装程序集使用 COM 对象时,如通过 Visual Studio IDE 将对 COM 模块的引用添加到 C# 项目时。 若要避免此错误,可以在项目属性“包装程序集密钥文件/名称”中指定 COM 包装程序集的强名称密钥文件

如果要通过 tlbimp 创建包装程序集,请参阅 tlbimp 文档了解有关如何向包装程序集分配强名称的信息。

如果程序集具有强名称,则它可以安装在全局程序集缓存中。 由此,引用的程序集也将进入全局程序集缓存。 只有具有强名称的程序集才可进入全局程序集缓存。
al1056 引用的程序集“filename”是已本地化的附属程序集

在创建当前程序集时引用了通过使用 AssemblyCultureAttribute 特性创建的程序集。 AssemblyCultureAttribute 特性指示该文件是已本地化的附属程序集,并且不合适引用附属程序集。 改为引用主要父程序集。
al1057 可执行文件不能进行本地化;区域性应始终为空

正在使用 /target:exe 创建程序集,但指定了 /culture。 .exe 中的程序集不能具有区域性字段中的信息。
al1058 “file”是一个程序集,不能作为模块添加

在 C++ 编译中,向 /assemblymodule(链接器选项)传递了包含程序集的文件。
al1059 未知错误(代码)

Al.exe 收到了未知错误代码 (code)。

可能的解决方案包括以下措施:

重新安装 Visual Studio。

重新安装 Windows SDK。

检查是否缺少文件。

检查是否有足够的磁盘空间。

检查是否有足够的内存。

停止可能正在访问这些文件的其他进程。

重新启动计算机。
al1060 创建哈希时加密失败 — 原因

为多文件程序集创建文件哈希值时出错。
al1061 由于“reason”,无法设置选项“option”

由于指定原因,为此选项指定的值无效。
al1062 已多次指定了模块“module”;它将仅被包含一次

当在命令行上多次指定相同的源、输入或模块文件时,将生成此警告。 确保仅指定该文件名称一次。
al1063 在此程序集的多个位置定义了公共类型“type”:“file1”和“file2”

在程序集的不止一个模块中找到相同类型。 每种类型在一个程序集中只能有一个版本。
al1064 无法指定多个 /bugreport 选项。

仅允许一个 /bugreport 选项。
al1065 文件名“File Name”太长或无效

指定的文件名长于允许的最大长度。
al1066 在命令行上或响应文件中不允许有字符“character”

在命令行上或在文件中找到了无效的字符。
al1067 “filename”是二进制文件而非文本文件

该文件是二进制格式,而不是文本格式。
al1068 已在此程序集中定义了模块“ModuleName”。 每个链接的资源和模块必须具有唯一的文件名。

该模块在此程序集中不止出现一次。
al1069 当已存在具有相同短文件名的长文件名时,无法创建短文件名“filename”

当前文件的名称为已存在的文件的名称的较短形式。 例如,编译 LongFileName.cs,然后使用名称 LongFi~1.cs 重新编译将导致类似于此的编译器错误。 如果已删除了具有长名称的编译器输出文件,但依然存在类似的链接器文件,则可能会出现此错误。
al1070 不可知的程序集不能具有特定于处理器的模块“Module Name”

如果正在使用 /platform:agnostic(或没有指定 /platform)进行构建,此时若尝试添加一个并非是不可知的模块(使用 /addmodule),将生成错误。 这就像尝试将 i386 obj 文件链接到 ia64 obj。

非不可知模块的主要来源是 C++。 如果正在使用 /addmodule 与 C++ 模块,可能需要修改生成脚本以指定合适的 /platform 设置。
al1072 程序集和模块“Module Name”不能以不同处理器为目标

不能链接针对不同处理器的程序集和模块,因为必须在单个处理器上运行结果。
al1073 引用的程序集“assembly”面向的是另一个处理器

不能链接针对不同处理器的程序集,因为必须在单个处理器上运行结果。
al1074 存储在“File Name”中的模块名称“Module Name”必须与其文件名匹配

这是链接器所必需的。 若要解决此问题,请使两个名称匹配。
al1075 已请求延迟签名,但未提供密钥

在对程序集延迟签名时,编译器不会计算和存储签名,而只是在文件中保留空间以便稍后可添加签名。

例如,使用 /delaysign+ 可允许测试人员将程序集放入全局缓存中。 测试完成后,可使用“程序集链接器”实用工具将私钥添加到程序集,从而对程序集进行完整的签名。
al1076 将类型“type”转发到多个程序集:“assembly”和“assembly”。

一种类型只能转发到一个程序集。
al1077 在“assembly”中定义公共类型“type”,并将其转发到“assembly”。

正在生成的程序集中具有重复的公共类型。 一个是有效的类型定义,另一个是类型转发器。

示例

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

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

请参阅