-link (Visual Basic)
Faz com que o compilador disponibilize informações de tipo COM nos assemblies especificados para o projeto que você está compilando no momento.
Sintaxe
-link:fileList
ou
-l:fileList
Argumentos
Termo | Definição |
---|---|
fileList |
Obrigatório. Lista delimitada por vírgulas de nomes de arquivos de assembly. Se o nome do ficheiro contiver um espaço, coloque-o entre aspas. |
Observações
A -link
opção permite implantar um aplicativo que tenha informações de tipo incorporadas. O aplicativo pode usar tipos em um assembly de tempo de execução que implementam as informações de tipo incorporadas sem exigir uma referência ao assembly de tempo de execução. Se várias versões do assembly de tempo de execução forem publicadas, o aplicativo que contém as informações de tipo incorporadas poderá trabalhar com as várias versões sem precisar ser recompilado. Para obter um exemplo, consulte Passo a passo: incorporando tipos de assemblies gerenciados.
Usar a -link
opção é especialmente útil quando você está trabalhando com interoperabilidade COM. Você pode incorporar tipos COM para que seu aplicativo não exija mais um PIA (primary interop assembly) no computador de destino. A -link
opção instrui o compilador a incorporar as informações de tipo COM do assembly de interoperabilidade referenciado no código compilado resultante. O tipo COM é identificado pelo valor CLSID (GUID). Como resultado, seu aplicativo pode ser executado em um computador de destino que instalou os mesmos tipos de COM com os mesmos valores CLSID. Os aplicativos que automatizam o Microsoft Office são um bom exemplo. Como aplicativos como o Office geralmente mantêm o mesmo valor CLSID em versões diferentes, seu aplicativo pode usar os tipos COM referenciados, desde que o .NET Framework 4 ou posterior esteja instalado no computador de destino e seu aplicativo use métodos, propriedades ou eventos incluídos nos tipos COM referenciados.
A -link
opção incorpora apenas interfaces, estruturas e delegados. Não há suporte para a incorporação de classes COM.
Nota
Ao criar uma instância de um tipo COM incorporado em seu código, você deve criar a instância usando a interface apropriada. Tentar criar uma instância de um tipo COM incorporado usando o CoClass causa um erro.
Para definir a -link
opção no Visual Studio, adicione uma referência de assembly e defina a Embed Interop Types
propriedade como true. O padrão para a Embed Interop Types
propriedade é false.
Se você vincular a um assembly COM (Assembly A) que por si só faz referência a outro assembly COM (Assembly B), você também terá que 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 tenha um tipo de retorno ou tipo de parâmetro do Assembly B é invocado.
Use -libpath para especificar o diretório no qual uma ou mais referências de assembly estão localizadas.
Como a opção de compilador -reference , a -link
opção de compilador usa o arquivo de resposta Vbc.rsp, que faz referência a assemblies do .NET Framework usados com freqüência. Use a opção de compilador -noconfig se não quiser que o compilador use o arquivo Vbc.rsp.
A forma abreviada de -link
é -l
.
Genéricos e Tipos Incorporados
As seções a seguir descrevem as limitações no uso de tipos genéricos em aplicativos que incorporam tipos de interoperabilidade.
Interfaces Genéricas
As interfaces genéricas incorporadas a partir 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 é incorporado a partir de um assembly de interoperabilidade não podem ser usados se esse tipo for de um assembly externo. Esta restrição não se aplica às interfaces. Por exemplo, considere a Range interface definida no Microsoft.Office.Interop.Excel assembly. Se uma biblioteca incorpora tipos de interoperabilidade do Microsoft.Office.Interop.Excel assembly e expõe um método que retorna um tipo genérico que tem um parâmetro cujo tipo é a Range interface, esse método deve retornar uma interface genérica, conforme 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 IList interface genérica sem erro.
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 OfficeApp.vb
de origem e assemblies de referência de COMData1.dll
e COMData2.dll
para produzir OfficeApp.exe
.
vbc -link:COMData1.dll,COMData2.dll -out:OfficeApp.exe OfficeApp.vb