Поделиться через


-link (Visual Basic)

Дает компилятору указание сделать всю информацию о типах COM из указанных сборок доступной компилируемому проекту.

Синтаксис

-link:fileList  

or

-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-типа с помощью компонентного класса возникнет ошибка.

Чтобы задать параметр -link в Visual Studio, добавьте ссылку на сборку и задайте для свойства Embed Interop Types значение true. По умолчанию для свойства Embed Interop Types задается значение false.

Ссылаясь на COM-сборку (сборку A), которая, в свою очередь, ссылается на другую COM-сборку (сборку Б), необходимо также добавить ссылку на сборку Б, если выполняется любое из следующих условий:

  • Тип из сборки A наследуется из типа или реализует интерфейс сборки Б.

  • Вызывается поле, свойство, событие или метод, имеющий тип возвращаемого значения или тип параметра из сборки Б.

Для указания каталога, в котором находятся одна или несколько ссылок на сборки, используется параметр -libpath.

Как и параметр компилятора -reference, параметр компилятора -link использует файл ответов Vbc.rsp, который ссылается на часто используемые сборки .NET Framework. Если вы не хотите, чтобы компилятор использовал файл Vbc.rsp, примените параметр компилятора -noconfig.

Краткой формой -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  

См. также