Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
or
-l:fileList
Argumentos
| Prazo | Definição |
|---|---|
fileList |
Obrigatório Lista delimitada por vírgulas de nomes de arquivo de assembly. Se o nome do arquivo contiver um espaço, coloque o nome entre aspas. |
Observações
A -link opção permite implantar um aplicativo que tenha informações de tipo inseridas. Em seguida, o aplicativo pode usar tipos em um assembly de runtime que implementam as informações de tipo inserido sem exigir uma referência ao assembly de runtime. Se várias versões do assembly de runtime forem publicadas, o aplicativo que contém as informações de tipo inserido poderá funcionar com as várias versões sem precisar ser recompilado. Para obter um exemplo, consulte Passo a passo: inserindo tipos de assemblies gerenciados.
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 exija mais um PIA (assembly de interoperabilidade primário) no computador de destino. A -link opção instrui o compilador a inserir 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 COM com os mesmos valores CLSID. Aplicativos que automatizam o Microsoft Office são um bom exemplo. Como aplicativos como o Office geralmente mantêm o mesmo valor CLSID em diferentes versões, 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 inseri apenas interfaces, estruturas e delegados. Não há suporte para a inserção de classes COM.
Observação
Ao criar uma instância de um tipo COM inserido em seu código, você deve criar a instância usando a interface apropriada. A tentativa de criar uma instância de um tipo COM inserido usando o CoClass causa um erro.
Para definir a opção -link 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 faz referência a outro assembly COM (Assembly B), você também precisará vincular ao Assembly B se qualquer um dos seguintes for verdadeiro:
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 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.
Assim como a opção do compilador -reference , a opção -link do compilador 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 você não quiser que o compilador use o arquivo Vbc.rsp.
A forma curta de -link é -l.
Genéricos e tipos 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
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
Tipos que têm um parâmetro genérico cujo tipo é inserido de um assembly de interoperabilidade não podem ser usados se esse tipo for de um assembly externo. Essa restrição não se aplica a interfaces. Por exemplo, considere a Range interface definida no Microsoft.Office.Interop.Excel assembly. Se uma biblioteca inserir tipos de interoperabilidade do Microsoft.Office.Interop.Excel assembly e expor um método que retorna um tipo genérico que tenha um parâmetro cujo tipo é a Range interface, esse método deverá 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 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 OfficeApp.vb de origem e os 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