-link (Visual Basic)
Faz com que o compilador disponibilize as informações de tipo COM nos assemblies especificados para o projeto sendo compilado no momento.
Syntax
-link:fileList
ou
-l:fileList
Argumentos
Termo | Definição |
---|---|
fileList |
Obrigatórios. Lista delimitada por vírgulas de nomes de arquivo do assembly. Se o nome do arquivo contém um espaço, coloque o nome entre aspas. |
Comentários
A opção -link
permite que você implante um aplicativo que inseriu informações de tipo. O aplicativo pode usar tipos em um assembly de runtime que implementa as informações de tipo inseridas sem a necessidade de uma referência ao assembly de runtime. Se forem publicadas várias versões do assembly de runtime, o aplicativo que contém as informações de tipo inseridas poderá trabalhar com as várias versões sem precisar ser recompilado. Para obter um exemplo, consulte Instruções passo a passo: Inserindo tipos de assemblies gerenciado.
Usar a opção -link
é especialmente útil quando você está trabalhando com a interoperabilidade COM. Você pode inserir tipos COM para que seu aplicativo não precise mais de um PIA (assembly de interoperabilidade primário) no computador de destino. A opção -link
instrui o compilador a inserir as informações de tipo de COM do assembly de interoperabilidade referenciado no código compilado resultante. O tipo COM é identificado pelo valor CLSID (GUID). Como resultado, o aplicativo pode ser executado em um computador de destino que tem os mesmos tipos COM instalados com os mesmos valores CLSID. Os aplicativos que automatizam o Microsoft Office são um bom exemplo. Como aplicativos como o Office normalmente mantêm o mesmo valor CLSID entre diferentes versões, seu aplicativo pode usar os tipos COM referenciados contanto que o .NET Framework 4 ou posterior esteja instalado no computador de destino e seu aplicativo use métodos, propriedades ou eventos que estão incluídos nos tipos COM referenciados.
A opção -link
incorpora apenas interfaces, estruturas e delegados. Não há suporte para a inserção de classes COM.
Observação
Quando você cria uma instância de um tipo COM inserido no seu código, você deve criar a instância usando a interface apropriada. Tentar criar uma instância de um tipo COM inserido usando o CoClass causa um erro.
Para definir a opção -link
em Visual Studio, adicione uma referência de assembly e defina a propriedade Embed Interop Types
como true. O valor padrão da propriedade Embed Interop Types
é false.
Se você vincular a um assembly COM (Assembly A) que em si faz referência a outro assembly COM (Assembly B), também precisará vincular ao Assembly B se uma das seguintes opções for verdadeira:
Um tipo do Assembly A herda de um tipo ou implementa uma interface do Assembly B.
Um campo, propriedade, evento ou método que tem um tipo de retorno ou de parâmetro do Assembly B é invocado.
Use -libpath para especificar o diretório no qual uma ou mais das suas referências do assembly estão localizadas.
Como a opção do compilador -reference, a opção do compilador -link
usa o arquivo de resposta Vbc.rsp, que faz referência a assemblies do .NET Framework usados com frequência. Use a opção do compilador -noconfig se não quiser que o compilador use o arquivo Vbc.rsp.
A forma abreviada de -link
é -l
.
Tipos genéricos e inseridos
As seções a seguir descrevem as limitações no uso de tipos genéricos em aplicativos que inserem tipos de interoperabilidade.
Interfaces genéricas
As interfaces genéricas que são inseridas de um assembly de interoperabilidade não podem ser usadas. Isso é mostrado no exemplo a seguir.
' The following code causes an error if ISampleInterface is an embedded interop type.
Dim sample As ISampleInterface(Of SampleType)
Tipos que têm parâmetros genéricos
Os tipos que têm um parâmetro genérico cujo tipo é inserido de um assembly de interoperabilidade não poderão ser usados se o tipo for de um assembly externo. Essa restrição não se aplica a interfaces. Por exemplo, considere a interface Range que é definida no assembly Microsoft.Office.Interop.Excel. Se uma biblioteca insere tipos de interoperabilidade do assembly Microsoft.Office.Interop.Excel e expõe um método que retorna um tipo genérico que tem um parâmetro cujo tipo é a interface Range, esse método deve retornar uma interface genérica, como mostrado no exemplo de código a seguir.
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
No exemplo a seguir, o código do cliente pode chamar o método que retorna a interface genérica IList sem erros.
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
Exemplo
A linha de comando a seguir compila o arquivo de origem OfficeApp.vb
e faz referência aos assemblies de COMData1.dll
e COMData2.dll
para produzir OfficeApp.exe
.
vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb