Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Компилятор делает сведения о типе COM в указанных сборках доступными для проекта, который в настоящее время компилируется.
Синтаксис
-link:fileList
или
-l:fileList
Аргументы
Срок | Определение |
---|---|
fileList |
Обязательное. Список имен файлов сборки с разделителями-запятыми. Если имя файла содержит пробел, заключите имя в кавычки. |
Замечания
Этот -link
параметр позволяет развернуть приложение с внедренными сведениями о типе. Затем приложение может использовать типы в сборке среды выполнения, реализующей сведения о внедренном типе, не требуя ссылки на сборку среды выполнения. Если публикуются различные версии сборки среды выполнения, приложение, содержащее сведения о внедренных типах, может работать с различными версиями без необходимости перекомпилироваться. Пример см. в пошаговом руководстве. Внедрение типов из управляемых сборок.
-link
Использование этого параметра особенно полезно при работе с COM-взаимодействием. Вы можете внедрить типы COM, чтобы приложение больше не требует основной сборки взаимодействия (PIA) на целевом компьютере. Параметр -link
указывает компилятору внедрить сведения о типе COM из указанной сборки взаимодействия в полученный скомпилированный код. Тип COM определяется значением CLSID (GUID). В результате приложение может работать на целевом компьютере, на котором установлены те же типы COM с теми же значениями CLSID. Приложения, автоматизирующие Microsoft Office, являются хорошим примером. Так как приложения, такие как Office, обычно сохраняют одно и то же значение CLSID в разных версиях, приложение может использовать ссылочные типы COM до тех пор, пока на целевом компьютере установлен .NET Framework 4 или более поздней версии, а приложение использует методы, свойства или события, включенные в ссылочные типы COM.
Параметр -link
внедряет только интерфейсы, структуры и делегаты. Внедрение com-классов не поддерживается.
Замечание
При создании экземпляра внедренного com-типа в коде необходимо создать экземпляр с помощью соответствующего интерфейса. Попытка создать экземпляр внедренного com-типа с помощью CoClass вызывает ошибку.
Чтобы задать -link
параметр в Visual Studio, добавьте ссылку на сборку и задайте Embed Interop Types
для свойства значение true. Значение по умолчанию для Embed Interop Types
свойства равно false.
Если вы ссылаетесь на сборку COM (сборка A), которая ссылается на другую сборку COM (сборку B), необходимо также связаться со сборкой B, если одно из следующих значений имеет значение true:
Тип сборки A наследует от типа или реализует интерфейс из сборки B.
Вызывается поле, свойство, событие или метод с типом возвращаемого типа или параметра из сборки B.
Используйте -libpath , чтобы указать каталог, в котором находится одна или несколько ссылок на сборку.
Как и параметр компилятора -reference , -link
параметр компилятора использует файл ответа Vbc.rsp, который ссылается на часто используемые сборки .NET Framework. Используйте параметр компилятора -noconfig , если не хотите, чтобы компилятор использовал Vbc.rsp-файл.
Короткая форма -link
.-l
Универсальные и внедренные типы
В следующих разделах описаны ограничения использования универсальных типов в приложениях, которые внедряют типы взаимодействия.
Универсальные интерфейсы
Универсальные интерфейсы, внедренные из сборки взаимодействия, нельзя использовать. Это показано в следующем примере.
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Типы с универсальными параметрами
Типы, имеющие универсальный параметр, тип которого внедрен из сборки взаимодействия, нельзя использовать, если этот тип находится из внешней сборки. Это ограничение не применяется к интерфейсам. Например, рассмотрим Range интерфейс, определенный в сборке Microsoft.Office.Interop.Excel . Если библиотека внедряет типы взаимодействия из Microsoft.Office.Interop.Excel сборки и предоставляет метод, который возвращает универсальный тип, имеющий параметр, тип которого является Range интерфейсом, этот метод должен возвращать универсальный интерфейс, как показано в следующем примере кода.
Imports System.Collections.Generic
Imports Microsoft.Office.Interop.Excel
Class Utility
' The following code causes an error when called by a client assembly.
Public Function GetRange1() As List(Of Range)
End Function
' The following code is valid for calls from a client assembly.
Public Function GetRange2() As IList(Of Range)
End Function
End Class
В следующем примере клиентский код может вызывать метод, возвращающий универсальный IList интерфейс без ошибок.
Module Client
Public Sub Main()
Dim util As New Utility()
' The following code causes an error.
Dim rangeList1 As List(Of Range) = util.GetRange1()
' The following code is valid.
Dim rangeList2 As List(Of Range) = CType(util.GetRange2(), List(Of Range))
End Sub
End Module
Пример
Следующая командная строка компилирует исходный файл OfficeApp.vb
и ссылки на сборки из COMData1.dll
и COMData2.dll
для создания OfficeApp.exe
.
vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb