使编译器将指定程序集中的 COM 类型信息提供给当前正在编译的项目。
-link:fileList
-/ -or-
-l:fileList
fileList | 必须填写。以逗号分隔的程序集文件名列表。如果文件名包含空格,请用引号括起来。 |
使用 -link 选项,可以部署具有嵌入式类型信息的应用程序。这样,应用程序就可以使用运行时程序集中实现嵌入式类型信息的类型,而无需引用运行时程序集。如果发布了运行时程序集的不同版本,包含嵌入式类型信息的应用程序就可以使用不同的版本,而无需重新编译。有关示例,请参阅演练: 从托管程序集嵌入类型。
使用 -link 选项在处理 COM 互操作时特别有用。您可以嵌入 COM 类型,这样您的应用程序就不再需要目标计算机上的主互操作程序集 (PIA)。-link 选项指示编译器将引用的互操作程序集中的 COM 类型信息嵌入到编译后的代码中。COM 类型由 CLSID(GUID)值标识。因此,如果目标计算机上安装了具有相同 CLSID 值的 COM 类型,您的应用程序就可以在目标计算机上运行。自动化 Microsoft Office 的应用程序就是一个很好的例子。由于 Office 等应用程序通常在不同版本中保持相同的 CLSID 值,因此只要目标计算机上安装了 .NET Framework 4 或更高版本,且应用程序使用了引用 COM 类型中包含的方法、属性或事件,您的应用程序就可以使用引用的 COM 类型。
-link 选项只嵌入接口、结构和委托。不支持嵌入 COM 类。
在代码中创建嵌入式 COM 类型的实例时,必须使用相应的接口来创建实例。尝试使用 CoClass 创建嵌入式 COM 类型的实例会导致错误。
要在 Visual Studio 中设置 -link 选项,请添加一个程序集引用,并将 Embed Interop Types 属性设置为 true。Embed Interop Types 属性的默认值是 false。
如果链接到一个 COM 程序集(程序集 A),而该程序集本身又引用了另一个 COM 程序集(程序集 B),那么在以下任一情况下,也必须链接到程序集 B:
•程序集 A 的一个类型继承自程序集 B 的一个类型或实现了程序集 B 的一个接口。
•调用具有来自程序集 B 的返回类型或参数类型的字段、属性、事件或方法。
与 -reference 编译器选项一样,-link 编译器选项使用 xsc.rsp 响应文件,该文件引用了常用的 .NET Framework 程序集。如果不想让编译器使用 xsc.rsp 文件,请使用 -noconfig 编译器选项。
-link 的简写形式是 -l。
以下各节将介绍在嵌入互操作类型的应用程序中使用泛型的限制。
不能使用从互操作程序集嵌入的通用接口。
如果类型来自外部程序集,则不能使用具有从互操作程序集嵌入类型的泛型参数的类型。这一限制不适用于接口。例如,Microsoft.Office.Interop.Excel 程序集中定义了 Range 接口。如果一个库嵌入了 Microsoft.Office.Interop.Excel 程序集中的互操作类型,并公开了一个返回泛型类型的方法,该方法的参数类型为 Range 接口,则该方法必须返回一个泛型接口,如下代码示例所示。
以下代码编译源文件 OfficeApp.prg 以及 COMData1.dll 和 COMData2.dll 中的引用程序集,生成 OfficeApp.exe。
xsc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.prg