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


-link (Visual Basic)

Компилятор делает сведения о типе 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  

См. также